shill: Change service.device property to be a DBus::Path

Change service.device property to be a DBus::Path because it is a path
not a string.  Flimflam exports the property as a path.  Exporting it
as a string causes cashew to die.

Change the unit tests to use valid DBus paths which can contain
elements separated by /.  Each element can contain only
[A-z][a-z][0-9]_ and cannot end in a trailing /.

BUG=chromium-os:28734
TEST=run shill unit tests, run shill on DUT. Run cashew.

Change-Id: I65fb843fb93f76d95eea6da334ad326ccb9fbd6f
Reviewed-on: https://gerrit.chromium.org/gerrit/19366
Commit-Ready: Jason Glasgow <jglasgow@chromium.org>
Reviewed-by: Jason Glasgow <jglasgow@chromium.org>
Tested-by: Jason Glasgow <jglasgow@chromium.org>
diff --git a/accessor_interface.h b/accessor_interface.h
index b47278c..527204c 100644
--- a/accessor_interface.h
+++ b/accessor_interface.h
@@ -48,6 +48,7 @@
 // differently. Accordingly, PropertyStore tracks RpcIdentifiers
 // separately from Strings. We create a separate typedef here, to make
 // the PropertyStore-related code read more simply.
+typedef std::string RpcIdentifier;
 typedef std::vector<std::string> RpcIdentifiers;
 typedef std::vector<std::string> Strings;
 typedef std::map<std::string, std::string> Stringmap;
@@ -62,6 +63,8 @@
 // RpcIdentifiersAccessor exists (even though it has the same
 // underlying type as StringsAccessor).
 typedef std::tr1::shared_ptr<
+  AccessorInterface<RpcIdentifier> > RpcIdentifierAccessor;
+typedef std::tr1::shared_ptr<
   AccessorInterface<std::vector<std::string> > >RpcIdentifiersAccessor;
 typedef std::tr1::shared_ptr<AccessorInterface<std::string> > StringAccessor;
 typedef std::tr1::shared_ptr<AccessorInterface<Stringmap> > StringmapAccessor;