Fixed #21172 -- have LiveServerThread follow the semantics of threading.Thread.join()

LiveServerThread.join() now behaves like threading.Thread.join().
LiveServerThread.terminate() is instead used to ask live http server to
terminate and close.