shill: cellular: Destroy cellular service before deregistering cellular device.

This ensures that when a Modem instance is destructed:

- The connection, if any, is dropped.
- The service, if any, is deregistered from the Manager.
- Circular references between the device and the service are eliminated.
- The service is destructed.
- The device is destructed.

Also, add extra logging at INFO level for infrequent but key events
such as Device construction and destruction.

BUG=chromium-os:31504
TEST=unit tests

Change-Id: I2e5a3d010339bfd32686a6a83a71b35b29edcbbc
Reviewed-on: https://gerrit.chromium.org/gerrit/26232
Commit-Ready: Darin Petkov <petkov@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/mock_cellular.h b/mock_cellular.h
index 827ce7b..882c5ef 100644
--- a/mock_cellular.h
+++ b/mock_cellular.h
@@ -35,6 +35,7 @@
                                              const DBusPropertiesMap &,
                                              const std::vector<std::string> &));
   MOCK_METHOD1(set_modem_state, void(ModemState));
+  MOCK_METHOD0(DestroyService, void());
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockCellular);