shill: Disconnect services before exiting.

Add SIGINT/SIGTERM handler to gracefully exit the main loop and add
ability to disconnect from all services during the clean up.

BUG=chromium-os:19997
TEST=Unit tests, WiFiManager, manually run shill and Control-C

Change-Id: Ida02ade729af624ef0ea4e32e3fb80436aaf870b
Reviewed-on: https://gerrit.chromium.org/gerrit/11092
Commit-Ready: Thieu Le <thieule@chromium.org>
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
diff --git a/manager.cc b/manager.cc
index 584fb92..4bd3be8 100644
--- a/manager.cc
+++ b/manager.cc
@@ -137,6 +137,12 @@
     (*it)->Save();
   }
 
+  vector<ServiceRefPtr>::iterator services_it;
+  for (services_it = services_.begin(); services_it != services_.end();
+       ++services_it) {
+    (*services_it)->Disconnect();
+  }
+
   adaptor_->UpdateRunning();
   modem_info_.Stop();
   device_info_.Stop();