Fix watch leaks

The goal here is to protect against self-DDOS related to watches and crash-looping processes. We now:

1. make sure that goroutines for watches are cleaned up when the connection dies
2. make sure that the watches themselves are cleaned up after the connection dies

Watch notifications also no longer re-allocate the watchlist for every event.