shill: Provider: Create common superclass

Make all *Provider classes in shill that are responsible for
managing Service objects descend from a common parent class.
This will allow the Manager to refactor repeated code related
to providers.  The parent class is non-virtual for now, and
implements stubs for all methods, so subclasses that do not
yet implement the full interface can safely omit these methods.
A future CL will flesh out these implementations and change
this to a pure-virtual Interface class.

BUG=chromium:265518
TEST=Unit tests

Change-Id: If4ee03a511f4732e3067ce134e501f73e421ace1
Reviewed-on: https://gerrit.chromium.org/gerrit/63604
Commit-Queue: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/vpn_provider.cc b/vpn_provider.cc
index 77f066f..0e2474b 100644
--- a/vpn_provider.cc
+++ b/vpn_provider.cc
@@ -39,8 +39,8 @@
 
 void VPNProvider::Stop() {}
 
-VPNServiceRefPtr VPNProvider::GetService(const KeyValueStore &args,
-                                         Error *error) {
+ServiceRefPtr VPNProvider::GetService(const KeyValueStore &args,
+                                      Error *error) {
   SLOG(VPN, 2) << __func__;
   string type = args.LookupString(flimflam::kProviderTypeProperty, "");
   if (type.empty()) {
@@ -92,7 +92,7 @@
   }
 }
 
-void VPNProvider::CreateServicesFromProfile(ProfileRefPtr profile) {
+void VPNProvider::CreateServicesFromProfile(const ProfileRefPtr &profile) {
   SLOG(VPN, 2) << __func__;
   const StoreInterface *storage = profile->GetConstStorage();
   set<string> groups =