throw RuntimeErrors when fail to start thread
threaded programs now need to join()
bug: timed wait did not do a _timed_ wait
threaded programs require join() at the end