Add specific exception handling to the secondary watcher run loop, and a default
uncaught exception handler.

This fixes a problem where secondary watcher threads were blowing up and causing
updates to no longer propogate to those secondaries.

In addition, add a default uncaught exception handler so if we have any cases we haven't
detected, then the whole process gets killed so it can get restarted in a known state
by its run script.