Cleanup & Proper Exit Handling

Along with a host of other minor cleanups, the main goal of this PR is to fix #34 by adding proper exit handling in the main thread and watchers. Of course, because #34 occurs so infrequently and cannot be reproduced, it will take some time to verify that this is a solution.

@martinrhoads @schleyfox @memory