Need to make sure the *watching* atom is set to false when the watcher repl exists so that the watcher thread knows to exit. Also need to check *watching* both at the top of the loop and after reading in a msg to avoid potentially displaying one extra message.
Add ability for watcher to interact with local REPL while also watching a remote REPL (interleaving the REPLs). This required a few changes. 1) The watch function is no longer a blocking loop on the main thread but a background thread. 2) Start a subrepl for the watcher. 3) In order for the watcher thread to properly interleave data it needs to know the current namespace of the main thread and that's the reason for the main-ns atom and the in-ns binding. It allows the background thread to keep tabs on the namespace of the watcher repl. 4) Only broadcast when during a repl flush. Before there was a broadcast event during any I/O, which is not only harder on the network but would have made the interleaving tougher. The code could use some reorg and documentation.