Upgrade packet requests to use flow objectives API.

Addressed a few issues found while using the flow objectives across a cluster:
 * Flow objectives should be installable from any node, not just the master.
   Therefore we need to ensure all nodes initialize a driver for each switch.
 * We no longer store a list of objectives that are waiting for the switch
   to arrive. If the we don't know about the switch yet we'll try a few times
   over a few seconds to find it, but after that we'll give up and report an
   error to the client.
 * Default drivers need to be available when the FlowObjectiveManager starts
   up, otherwise it is common to get flow objective requests before any
   drivers have been loaded.

Change-Id: I1c2ea6a223232402c31e8139729e4b6251ab8b0f
diff --git a/drivers/src/main/java/org/onosproject/driver/pipeline/DefaultDrivers.java b/drivers/src/main/java/org/onosproject/driver/pipeline/DefaultDrivers.java
index 580691b..bfa9c32 100644
--- a/drivers/src/main/java/org/onosproject/driver/pipeline/DefaultDrivers.java
+++ b/drivers/src/main/java/org/onosproject/driver/pipeline/DefaultDrivers.java
@@ -16,32 +16,31 @@
 package org.onosproject.driver.pipeline;
 
 import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onosproject.net.driver.DriverAdminService;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.net.driver.DefaultDriverProviderService;
+import org.onosproject.net.driver.Driver;
 import org.onosproject.net.driver.DriverProvider;
 import org.onosproject.net.driver.XmlDriverLoader;
-import org.apache.felix.scr.annotations.Component;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Set;
 
 /**
  * Bootstrap for built in drivers.
  */
-@Component(immediate = true)
-public class DefaultDrivers {
+@Service
+@Component(immediate = false)
+public class DefaultDrivers implements DefaultDriverProviderService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     private static final String DRIVERS_XML = "/onos-drivers.xml";
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected DriverAdminService driverService;
-
     private DriverProvider provider;
 
     @Activate
@@ -50,7 +49,6 @@
         try {
             InputStream stream = classLoader.getResourceAsStream(DRIVERS_XML);
             provider = new XmlDriverLoader(classLoader).loadDrivers(stream);
-            driverService.registerProvider(provider);
         } catch (IOException e) {
             log.error("Unable to load default drivers", e);
         }
@@ -59,10 +57,11 @@
 
     @Deactivate
     protected void deactivate() {
-        if (provider != null) {
-            driverService.unregisterProvider(provider);
-        }
         log.info("Stopped");
     }
 
+    @Override
+    public Set<Driver> getDrivers() {
+        return provider.getDrivers();
+    }
 }