shill: openvpn: Hold connect/reconnect until a new service is online.

Use OpenVPN's management hold API to prevent the client from
connecting/reconnecting until an underlying connection becomes
available. The hold is released only when a new default service is
connected. This ensures, for example, that the openvpn client will not
use stale network configuration on reconnect. Also, add API to Manager
to register and deregister callbacks to monitor for default service
changes.

BUG=chromium-os:31572
TEST=unit tests, tested on device with inactivity restart/reconnect

Change-Id: I6d6d63a03ee92aaa18b7a2cca9462a8ea1e5a931
Reviewed-on: https://gerrit.chromium.org/gerrit/26920
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_manager.h b/mock_manager.h
index 1c27513..6070887 100644
--- a/mock_manager.h
+++ b/mock_manager.h
@@ -34,6 +34,9 @@
   MOCK_METHOD1(RegisterService, void(const ServiceRefPtr &to_manage));
   MOCK_METHOD1(UpdateService, void(const ServiceRefPtr &to_update));
   MOCK_METHOD1(DeregisterService, void(const ServiceRefPtr &to_forget));
+  MOCK_METHOD1(RegisterDefaultServiceCallback,
+               int(const ServiceCallback &callback));
+  MOCK_METHOD1(DeregisterDefaultServiceCallback, void(int tag));
   MOCK_METHOD1(UpdateDevice, void(const DeviceRefPtr &to_update));
   MOCK_METHOD1(RecheckPortalOnService, void(const ServiceRefPtr &service));
   MOCK_METHOD2(HandleProfileEntryDeletion,