Fix the concurrent testing framework

* Use start() to start a thread not run()... (no wonder the tests
  all passed)
* Catch and rethrow exceptions from threads, for tests with
  expected exceptions