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/net/device/DeviceService.java b/core/api/src/main/java/org/onosproject/net/device/DeviceService.java
index ab6dba5..c59454d 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceService.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceService.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.net.device;
 
+import org.onosproject.event.ListenerService;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
@@ -26,7 +27,8 @@
 /**
  * Service for interacting with the inventory of infrastructure devices.
  */
-public interface DeviceService {
+public interface DeviceService
+    extends ListenerService<DeviceEvent, DeviceListener> {
 
     /**
      * Returns the number of infrastructure devices known to the system.
@@ -119,18 +121,4 @@
      */
     boolean isAvailable(DeviceId deviceId);
 
-    /**
-     * Adds the specified device listener.
-     *
-     * @param listener device listener
-     */
-    void addListener(DeviceListener listener);
-
-    /**
-     * Removes the specified device listener.
-     *
-     * @param listener device listener
-     */
-    void removeListener(DeviceListener listener);
-
 }