shill: Move Metrics from singleton to Shill daemon

While implementing chromium-os:24810, it was discovered that Metrics is
cleaner if it is passed around like ControlInterface, Dispatcher,
Manager, etc.  This approach also makes Metrics more testable.

BUG=chromium-os:24810
TEST=Unit tests, network_WiFiManager suite

Change-Id: I556a1bd11f21f0b93ecfeaae8855dfb99ed5e5f9
Reviewed-on: https://gerrit.chromium.org/gerrit/14099
Commit-Ready: Thieu Le <thieule@chromium.org>
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
diff --git a/modem.cc b/modem.cc
index f4f46cb..c61ba76 100644
--- a/modem.cc
+++ b/modem.cc
@@ -27,6 +27,7 @@
              const std::string &path,
              ControlInterface *control_interface,
              EventDispatcher *dispatcher,
+             Metrics *metrics,
              Manager *manager,
              mobile_provider_db *provider_db)
     : proxy_factory_(ProxyFactory::GetInstance()),
@@ -35,6 +36,7 @@
       task_factory_(this),
       control_interface_(control_interface),
       dispatcher_(dispatcher),
+      metrics_(metrics),
       manager_(manager),
       provider_db_(provider_db),
       pending_device_info_(false) {
@@ -130,6 +132,7 @@
             << " interface index " << interface_index << ".";
   device_ = new Cellular(control_interface_,
                          dispatcher_,
+                         metrics_,
                          manager_,
                          link_name_,
                          address_bytes.HexEncode(),