Improve testdriver

Remove most of waiting from TestDriver (TAs won't like that)
Create Condition Variable helper (used by TestDriver)
Allow Server to be stopped
TestDriver to be run with JUnit, as well as manually, and through DemoRunner