Adding some base-classes to eliminate event and listener boiler-plate code throughout a number of subsystems.

Refactored all core components to take advantage of this; apps remain to be done.

Change-Id: Ib0935ba07ff81b0fa032534004ec9ac6187cbf22
diff --git a/core/api/src/main/java/org/onosproject/event/ListenerRegistry.java b/core/api/src/main/java/org/onosproject/event/ListenerRegistry.java
index e6af201..ef02af06 100644
--- a/core/api/src/main/java/org/onosproject/event/ListenerRegistry.java
+++ b/core/api/src/main/java/org/onosproject/event/ListenerRegistry.java
@@ -28,7 +28,7 @@
  * listeners and dispatching events to them as part of event sink processing.
  */
 public class ListenerRegistry<E extends Event, L extends EventListener<E>>
-        implements EventSink<E> {
+        implements ListenerService<E, L>, EventSink<E> {
 
     private static final long LIMIT = 1_800; // ms
 
@@ -42,22 +42,13 @@
      */
     protected final Set<L> listeners = new CopyOnWriteArraySet<>();
 
-
-    /**
-     * Adds the specified listener.
-     *
-     * @param listener listener to be added
-     */
+    @Override
     public void addListener(L listener) {
         checkNotNull(listener, "Listener cannot be null");
         listeners.add(listener);
     }
 
-    /**
-     * Removes the specified listener.
-     *
-     * @param listener listener to be removed
-     */
+    @Override
     public void removeListener(L listener) {
         checkNotNull(listener, "Listener cannot be null");
         if (!listeners.remove(listener)) {