libchromeos: Add generic DBus data serialization/deserialization

Provide generic methods to write arbitrary C++ data to D-Bus
message buffers and read it back. Implement generic conatainer
support such as std::vector, std::map, std::pair to support
D-Bus ARRAY, DICT, STRUCT data types. Also using chromeos::Any
as a D-Bus VARIANT type.

Added a bunch of unit tests for dbus_utils.

BUG=None
TEST=FEATURES=test emerge-link libchromeos
     FEATURES=test emerge-link buffet

Change-Id: Ic445e11fb2e65c8243df183c6e93c4b3cb881dc8
Reviewed-on: https://chromium-review.googlesource.com/213923
Reviewed-by: Ben Chan <benchan@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 3e09f30..a1cb374 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -53,14 +53,15 @@
     FILE_PATH_LITERAL("/var/lib/buffet/device_reg_info");
 
 bool GetParamValue(
-    const std::map<std::string, std::unique_ptr<base::Value>>& params,
+    const std::map<std::string, std::string>& params,
     const std::string& param_name,
     std::string* param_value) {
   auto p = params.find(param_name);
   if (p == params.end())
     return false;
 
-  return p->second->GetAsString(param_value);
+  *param_value = p->second;
+  return true;
 }
 
 std::pair<std::string, std::string> BuildAuthHeader(
@@ -335,7 +336,7 @@
 }
 
 std::string DeviceRegistrationInfo::StartRegistration(
-    const std::map<std::string, std::unique_ptr<base::Value>>& params,
+    const std::map<std::string, std::string>& params,
     chromeos::ErrorPtr* error) {
   GetParamValue(params, storage_keys::kClientId, &client_id_);
   GetParamValue(params, storage_keys::kClientSecret, &client_secret_);