Just reset the watch-key instead of recursively attaching a new listener.
WIP: Use timers and agents in order to not smash thread-pools.

If we do not control the concurrency of filewatchers then it means
clients will need to control it. They cannot just spawn off goroutines
and hope for the best since the handler calls block.

By employing agents and timers I hope to be able to simply provide a
channel from which the client can block on.