shill: Add a ModemInfo object that's a peer of DeviceInfo.

ModemInfo is responsible for managing ModemManager instances. Each ModemManager
instance watches for and handles an individual ModemManager DBus service. Each
ModemManager will be responsible for creating cellular devices associated with
that ModemManager.

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

Change-Id: Ie9946cba4465aea8671305e32596fc9f6cca96e2
Reviewed-on: http://gerrit.chromium.org/gerrit/4124
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/manager.cc b/manager.cc
index ef3774e..820dba7 100644
--- a/manager.cc
+++ b/manager.cc
@@ -31,9 +31,11 @@
 
 namespace shill {
 Manager::Manager(ControlInterface *control_interface,
-                 EventDispatcher *dispatcher)
+                 EventDispatcher *dispatcher,
+                 GLib *glib)
   : adaptor_(control_interface->CreateManagerAdaptor(this)),
     device_info_(control_interface, dispatcher, this),
+    modem_info_(control_interface, dispatcher, this, glib),
     running_(false) {
   HelpRegisterDerivedString(flimflam::kActiveProfileProperty,
                             &Manager::GetActiveProfileName,
@@ -71,7 +73,7 @@
   // TODO(cmasone): Wire these up once we actually put in profile support.
   // known_properties_.push_back(flimflam::kProfilesProperty);
 
-  profiles_.push_back(new DefaultProfile(control_interface, &glib_, props_));
+  profiles_.push_back(new DefaultProfile(control_interface, glib, props_));
 
   VLOG(2) << "Manager initialized.";
 }
@@ -83,11 +85,14 @@
   running_ = true;
   adaptor_->UpdateRunning();
   device_info_.Start();
+  modem_info_.Start();
 }
 
 void Manager::Stop() {
   running_ = false;
   adaptor_->UpdateRunning();
+  modem_info_.Stop();
+  device_info_.Stop();
 }
 
 const ProfileRefPtr &Manager::ActiveProfile() {