Add support to decode Device, Port, Link JSON.

- Device, Port, Link can now be encoded and decoded back to Java Object,
  which will be Object#equals to the original.
- Modified DeviceServiceAdapter to be null-safe when possible
- Modified JSON assertion/matcher not to check for exact number of attributes

Change-Id: I7cf02e2254cf17f6265fb15847912519e564b14f
diff --git a/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
index ccd4a6d..422d062 100644
--- a/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
@@ -17,12 +17,14 @@
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
+
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -36,7 +38,7 @@
 
     @Override
     public Iterable<Device> getDevices() {
-        return null;
+        return Collections.emptyList();
     }
 
     @Override
@@ -58,12 +60,12 @@
 
     @Override
     public MastershipRole getRole(DeviceId deviceId) {
-        return null;
+        return MastershipRole.NONE;
     }
 
     @Override
     public List<Port> getPorts(DeviceId deviceId) {
-        return null;
+        return Collections.emptyList();
     }
 
     @Override