[AETHER-72] Refactoring RouteService

- to use bulk updates interface
- to use new getRoutesForNextHops API
- to use multi-thread resolver
- to use multi-thread hostexec
- to use a concurrent hashmap instead of synchronized
- to use a non-blocking resolved store

Additionally updates unit tests

Change-Id: Id960abd0f2a1b03066ce34b6a2f72b76566bb58c
diff --git a/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteStore.java b/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteStore.java
index 5eaa898..2171fcb 100644
--- a/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteStore.java
+++ b/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteStore.java
@@ -38,6 +38,13 @@
     void updateRoute(Route route);
 
     /**
+     * Adds or updates the given routes in the store.
+     *
+     * @param routes routes to add or update
+     */
+    void updateRoutes(Collection<Route> routes);
+
+    /**
      * Removes the given route from the store.
      *
      * @param route route to remove
@@ -45,6 +52,13 @@
     void removeRoute(Route route);
 
     /**
+     * Removes the given routes from the store.
+     *
+     * @param routes routes to remove
+     */
+    void removeRoutes(Collection<Route> routes);
+
+    /**
      * Replaces the all the routes for a prefix
      * with the given route.
      *
@@ -79,6 +93,14 @@
     Collection<Route> getRoutesForNextHop(IpAddress ip);
 
     /**
+     * Returns all routes that point to any of the given next hops IP addresses.
+     *
+     * @param nextHops next hops IP addresses
+     * @return collection of routes sets
+     */
+    Collection<RouteSet> getRoutesForNextHops(Collection<IpAddress> nextHops);
+
+    /**
      * Returns the set of routes in the default route table for the given prefix.
      *
      * @param prefix IP prefix