Nexus: Clean up supplicant events, protocol, and continue plumbing

    - Create SupplicantEvent classes for events
    - New SupplicantEventFactory for creating events
    - Extract Controller -> NetworkManager callbacks into IControllerHandler
    - Move ScanResult handling from Supplicant -> WifiController
    - Plumb more 'onConnected()' code
    - Instead of re-creating NetworkList every-time, merge in
      new entries
    - Extract SupplicantListener -> Supplicant callbacks into
      ISupplicantEventHandler
    - Move SupplicantListener callback handling to WifiController
    - Add unlocked version of lookupNetwork()
    - Save supplicant config after setting a WifiNetwork variable
    - Move property registration from WifiNetwork -> Supplicant
    - Change wifi enable broadcast messages
    - Add 3 new events: 'onAssociating', 'onAssociated', 'onConnectionTimeout'
    - Add support for handling KeyManagement

Signed-off-by: San Mehat <san@google.com>
diff --git a/nexus/VpnController.cpp b/nexus/VpnController.cpp
index 1246703..add4dc3 100644
--- a/nexus/VpnController.cpp
+++ b/nexus/VpnController.cpp
@@ -25,18 +25,19 @@
 #include "PropertyManager.h"
 #include "VpnController.h"
 
-VpnController::VpnController(PropertyManager *propmngr) :
-               Controller("VPN", propmngr) {
+VpnController::VpnController(PropertyManager *propmngr,
+                             IControllerHandler *handlers) :
+               Controller("VPN", propmngr, handlers) {
     mEnabled = false;
-    propmngr->registerProperty("vpn.enabled", this);
-    propmngr->registerProperty("vpn.gateway", this);
 }
 
 int VpnController::start() {
+    mPropMngr->registerProperty("vpn.enabled", this);
     return 0;
 }
 
 int VpnController::stop() {
+    mPropMngr->unregisterProperty("vpn.enabled");
     return 0;
 }
 
@@ -49,8 +50,13 @@
             return 0;
         rc = (en ? enable() : disable());
 
-        if (!rc)
+        if (!rc) {
             mEnabled = en;
+            if (en) 
+                mPropMngr->unregisterProperty("vpn.gateway");
+            else
+                mPropMngr->unregisterProperty("vpn.gateway");
+        }
         return rc;
     } if (!strcmp(name, "vpn.gateway")) {
         if (!inet_aton(value, &mVpnGateway)) {