Add test cases to test subscriber multi-table support with ONOS using CPQD and a new ONOS app.
This would verify single channel multiple subscriber joins using cpqd.
ONOS multi-table support was found to be broken with cordmcast.
Hence a new app similar to cordmcast was added to verify if multi-table rules were provisioned with ONOS
cpqd pipeline driver.
Using a different subscriber port per subscriber and provisioning an uplink port to be used
for IGMP traffic, it was found that ONOS cpqd driver fails to provision multi-table flows using group ids.
The subscriberMultiTable tests uses the new cordigmp multitable app to provision multicast flows in ONOS
enabling the spring-open-cpqd pipeline driver with ONOS when using CPQD.

If you want to verify/run the subscriberMultiTable test, first rebuild the test container with cpqd using:
sudo cord-test.py build test
And then run the subscriberMultiTable test: test_subscriber_join_recv using:
cord-test.run run --radius -t subscriberMultiTable:subscriber_exchange.test_subscriber_join_recv -k
diff --git a/src/test/utils/OnosCtrl.py b/src/test/utils/OnosCtrl.py
index 91d5586..880e8f6 100644
--- a/src/test/utils/OnosCtrl.py
+++ b/src/test/utils/OnosCtrl.py
@@ -95,3 +95,12 @@
                                    params = params, headers = headers,
                                    data = payload)
         return result.ok, result.status_code
+
+    @classmethod
+    def uninstall_app(cls, app_name, onos_ip = None):
+        params = {'activate':'true'}
+        headers = {'content-type':'application/octet-stream'}
+        url = cls.applications_url if onos_ip is None else 'http://{0}:8181/onos/v1/applications'.format(onos_ip)
+        app_url = '{}/{}'.format(url, app_name)
+        resp = requests.delete(app_url, auth = cls.auth)
+        return resp.ok, resp.status_code