shill: serialize Manager.Services as an array of object paths

Previously, we serialized this property as an array of strings.
That was contrary to the API documentation, and caused a crash
in update_engine_client.

BUG=chromium-os:27987
TEST=unit tests, manual

Manual testing: ran on device, and checked that update_engine_client
was able to identify the technology of the default service.

Collateral change: replace PathArray with Paths (and similar
for variations, such as path_array). This makes the naming of
Paths conform to the style used for Strings, Stringmaps, etc.

Change-Id: I4ee4b9df04d3f006ab974c2092f6e515ebf5a9b8
Reviewed-on: https://gerrit.chromium.org/gerrit/18592
Commit-Ready: mukesh agrawal <quiche@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
diff --git a/property_store.cc b/property_store.cc
index d3bd527..8e8a35c 100644
--- a/property_store.cc
+++ b/property_store.cc
@@ -147,6 +147,12 @@
       ReadablePropertyConstIterator<KeyValueStore>(key_value_store_properties_);
 }
 
+ReadablePropertyConstIterator<RpcIdentifiers>
+PropertyStore::GetRpcIdentifiersPropertiesIter() const {
+  return ReadablePropertyConstIterator<RpcIdentifiers>(
+      rpc_identifiers_properties_);
+}
+
 ReadablePropertyConstIterator<string>
 PropertyStore::GetStringPropertiesIter() const {
   return ReadablePropertyConstIterator<string>(string_properties_);
@@ -400,6 +406,14 @@
   key_value_store_properties_[name] = acc;
 }
 
+void PropertyStore::RegisterDerivedRpcIdentifiers(
+    const string &name,
+    const RpcIdentifiersAccessor &accessor) {
+  DCHECK(!Contains(name) || ContainsKey(rpc_identifiers_properties_, name))
+      << "(Already registered " << name << ")";
+  rpc_identifiers_properties_[name] = accessor;
+}
+
 void PropertyStore::RegisterDerivedString(const string &name,
                                           const StringAccessor &accessor) {
   DCHECK(!Contains(name) || ContainsKey(string_properties_, name))