shill: Implement GetEntry on Profile

Implement "GetEntry" on profile_dbus_adaptor.  This change adds
the ability to look up a Service in the Manager by its
StorageIdentifier and then to return its properties to the caller.
If the Service does not exist in the manager, we have to read
directly out of the Profile's store and build a DBus property dict
out of its contents.  This is a pretty gross method, and I've already
created a bug to remove this as soon as we can diverge from the
flimflam Profile API.  crosbug.com/25813

BUG=chromium-os:25542
TEST=New unit tests + Manual: chrome://settings/internet now lists
both visible and unavailable networks under "Remembered Networks"
and clikcing on "Forget Network" purges the network from the profile.

Change-Id: Ib2f0ab772e40a1f615206a7b985be446fc7facde
Reviewed-on: https://gerrit.chromium.org/gerrit/15200
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/store_interface.h b/store_interface.h
index 9e20ce0..9d1e7ab 100644
--- a/store_interface.h
+++ b/store_interface.h
@@ -20,13 +20,14 @@
   virtual bool Flush() = 0;
 
   // Returns a set of all groups contained in the store.
-  virtual std::set<std::string> GetGroups() = 0;
+  virtual std::set<std::string> GetGroups() const = 0;
 
   // Returns the names of all groups that contain the named |key|.
-  virtual std::set<std::string> GetGroupsWithKey(const std::string &key) = 0;
+  virtual std::set<std::string> GetGroupsWithKey(
+      const std::string &key) const = 0;
 
   // Returns true if the store contains |group|, false otherwise.
-  virtual bool ContainsGroup(const std::string &group) = 0;
+  virtual bool ContainsGroup(const std::string &group) const = 0;
 
   // Deletes |group|:|key|. Returns true on success.
   virtual bool DeleteKey(const std::string &group, const std::string &key) = 0;
@@ -42,7 +43,7 @@
   // in the store).
   virtual bool GetString(const std::string &group,
                          const std::string &key,
-                         std::string *value) = 0;
+                         std::string *value) const = 0;
 
   // Associates |group|:|key| with a string |value|. Returns true on success,
   // false otherwise.
@@ -55,7 +56,7 @@
   // present in the store).
   virtual bool GetBool(const std::string &group,
                        const std::string &key,
-                       bool *value) = 0;
+                       bool *value) const = 0;
 
   // Associates |group|:|key| with a boolean |value|. Returns true on success,
   // false otherwise.
@@ -68,7 +69,7 @@
   // present in the store).
   virtual bool GetInt(const std::string &group,
                       const std::string &key,
-                      int *value) = 0;
+                      int *value) const = 0;
 
   // Associates |group|:|key| with an integer |value|. Returns true on success,
   // false otherwise.
@@ -81,7 +82,7 @@
   // in the store).
   virtual bool GetStringList(const std::string &group,
                              const std::string &key,
-                             std::vector<std::string> *value) = 0;
+                             std::vector<std::string> *value) const = 0;
 
   // Associates |group|:|key| with a string list |value|. Returns true on
   // success, false otherwise.