Refactor route subsystem to support multiple routes for each prefix.

This resulted in a substantial refatoring of the route subsystem, including
some minor external API changes. The interface between the manager and the
store has been changed to deal with multiple routes per prefix. The distributed
route store has been updated to be able to distribute route table information.
The route subsystem no longer stores next hop information in the route store.
This information is already available from the host store so the routes system
simply fetches it from there.

Change-Id: I7657b3efb6dcb76afa6f17c931f154a970a16528
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/routing/RouteServiceAdapter.java b/incubator/api/src/test/java/org/onosproject/incubator/net/routing/RouteServiceAdapter.java
index 26bb641..a13f5c8 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/routing/RouteServiceAdapter.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/routing/RouteServiceAdapter.java
@@ -20,6 +20,7 @@
 
 import java.util.Collection;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -42,11 +43,26 @@
     }
 
     @Override
+    public Collection<RouteInfo> getRoutes(RouteTableId id) {
+        return null;
+    }
+
+    @Override
+    public Collection<RouteTableId> getRouteTables() {
+        return null;
+    }
+
+    @Override
     public Route longestPrefixMatch(IpAddress ip) {
         return null;
     }
 
     @Override
+    public Optional<ResolvedRoute> longestPrefixLookup(IpAddress ip) {
+        return null;
+    }
+
+    @Override
     public Collection<Route> getRoutesForNextHop(IpAddress nextHop) {
         return null;
     }