shill: Convert DHCP Proxy to use a model similar to Supplicant and ModemManager.

Also, don't create a DBus connection for each proxy since this doesn't work in
some event callbacks and wastes resources. Instead use a shared connection
provided by the ProxyFactory.

BUG=chromium-os:17735
TEST=unit tests, tested on device

Change-Id: I4d16b430783c1159501c0414ef3b846bce1a4c0e
Reviewed-on: http://gerrit.chromium.org/gerrit/4279
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
diff --git a/modem_manager_proxy.cc b/modem_manager_proxy.cc
index 21a0a93..bf9ba16 100644
--- a/modem_manager_proxy.cc
+++ b/modem_manager_proxy.cc
@@ -11,11 +11,11 @@
 
 namespace shill {
 
-ModemManagerProxy::ModemManagerProxy(ModemManager *manager,
+ModemManagerProxy::ModemManagerProxy(DBus::Connection *connection,
+                                     ModemManager *manager,
                                      const string &path,
                                      const string &service)
-    : connection_(DBus::Connection::SystemBus()),
-      proxy_(manager, &connection_, path, service) {}
+    : proxy_(connection, manager, path, service) {}
 
 ModemManagerProxy::~ModemManagerProxy() {}
 
@@ -23,8 +23,8 @@
   return proxy_.EnumerateDevices();
 }
 
-ModemManagerProxy::Proxy::Proxy(ModemManager *manager,
-                                DBus::Connection *connection,
+ModemManagerProxy::Proxy::Proxy(DBus::Connection *connection,
+                                ModemManager *manager,
                                 const string &path,
                                 const string &service)
     : DBus::ObjectProxy(*connection, path, service.c_str()),