shill: Implement Connect() and Disconnect() for CellularCapabilityUniversal

Refactor such that Cellular::Connect() passes down a callback that can
call On{Connected,Disconnected}{,Failed}(), rather than having
subclasses know about it. This requires overriding
CellularCapabilityClassic::Connect() in
CellularCapabilityGSM so that it can put its APN-handling callback on
the chain; this in turn requires exposing simple_proxy_ to that class.

TEST=Connect and disconnect from UI
BUG=None

Change-Id: I0b504e106ea6f880d40fa452149db34bc60b4f5b
Reviewed-on: https://gerrit.chromium.org/gerrit/20584
Reviewed-by: Jason Glasgow <jglasgow@chromium.org>
Commit-Ready: Nathan J. Williams <njw@chromium.org>
Tested-by: Nathan J. Williams <njw@chromium.org>
Reviewed-by: Eric Shienbrood <ers@chromium.org>
diff --git a/cellular.h b/cellular.h
index ca269cc..73eb7f1 100644
--- a/cellular.h
+++ b/cellular.h
@@ -228,6 +228,9 @@
       std::string(Cellular::*get)(Error *error),
       void(Cellular::*set)(const std::string &value, Error *error));
 
+  void OnConnectReply(const Error &error);
+  void OnDisconnectReply(const Error &error);
+
   State state_;
   ModemState modem_state_;