shill: vpn: Use Mapped custom accessor for properties

VPN services simply ask their drivers to populate their PropertyStore.
VPN drivers use CustomMapped accessors to make their KeyValueStore
available.

BUG=chromium-os:28303,chromium-os:28223
TEST=New unit tests

Change-Id: I05a4f2c09ddd03b40b947274fd38572da5d6dbdc
Reviewed-on: https://gerrit.chromium.org/gerrit/18989
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/vpn_service.h b/vpn_service.h
index 203357f..2b45b61 100644
--- a/vpn_service.h
+++ b/vpn_service.h
@@ -31,6 +31,8 @@
   virtual bool Load(StoreInterface *storage);
   virtual bool Save(StoreInterface *storage);
 
+  virtual void InitDriverPropertyStore();
+
   VPNDriver *driver() const { return driver_.get(); }
 
   static std::string CreateStorageIdentifier(const KeyValueStore &args,