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/modem.cc b/modem.cc
index c54e76c..62ab19f 100644
--- a/modem.cc
+++ b/modem.cc
@@ -49,7 +49,9 @@
 }
 
 Modem::~Modem() {
-  if (device_.get()) {
+  LOG(INFO) << "Modem destructed: " << owner_ << " at " << path_;
+  if (device_) {
+    device_->DestroyService();
     manager_->device_info()->DeregisterDevice(device_);
   }
 }