dataplane: single-threaded rewrite

There's now just one thread for the dataplane instead of one per port. This
greatly reduces the amount of code needed for each port implementation.
diff --git a/src/python/oftest/base_tests.py b/src/python/oftest/base_tests.py
index 7f29db5..db9e4a9 100644
--- a/src/python/oftest/base_tests.py
+++ b/src/python/oftest/base_tests.py
@@ -112,7 +112,7 @@
         logging.info("Teardown for simple dataplane test")
         SimpleProtocol.tearDown(self)
         if hasattr(self, 'dataplane'):
-            self.dataplane.kill(join_threads=self.clean_shutdown)
+            self.dataplane.kill()
             del self.dataplane
         logging.info("Teardown done")
 
@@ -136,7 +136,7 @@
 
     def tearDown(self):
         logging.info("Teardown for simple dataplane test")
-        self.dataplane.kill(join_threads=self.clean_shutdown)
+        self.dataplane.kill()
         del self.dataplane
         logging.info("Teardown done")