shill: Make EthernetService behave more like a Service

Add Connect() and Disconnect() calls to EthernetService so that they
behave more like a Service and less like strange extensions of the
Ethernet object.  This has the nice side effect that the Manager can
autoconnect them, which adds a certain amount of fault tolerance to the
L3 configuration.  This in turn fixes a bug where DHCP negotiation
timing out over ethernet is incorrectly reported in shill.

BUG=chromium-os:35603
TEST=Unit tests pass, I can hand connect/disconnect to ethernet, DHCP
autotests for basic negotiation success and renewal timeouts pass.
Added another simple unit test.

Change-Id: I35aa2f5d2d8155bf0d24a80c7da9ddf41348ab03
Reviewed-on: https://gerrit.chromium.org/gerrit/36625
Tested-by: Christopher Wiley <wiley@chromium.org>
Commit-Ready: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
diff --git a/ethernet_service.cc b/ethernet_service.cc
index 837bde8..77ac11a 100644
--- a/ethernet_service.cc
+++ b/ethernet_service.cc
@@ -45,6 +45,14 @@
 
 EthernetService::~EthernetService() { }
 
+void EthernetService::Connect(Error */*error*/) {
+  ethernet_->ConnectTo(this);
+}
+
+void EthernetService::Disconnect(Error */*error*/) {
+  ethernet_->DisconnectFrom(this);
+}
+
 std::string EthernetService::GetDeviceRpcId(Error */*error*/) {
   return ethernet_->GetRpcIdentifier();
 }