Cleanup watcher

This is a refactoring that moves the implementation of the watcher from the `watch` command into a new `Nanoc::Extra::Watcher` class.

Some stuff that remains to be done:

- [ ] Implement good tests for the user notifier
- [ ] Implement good tests for the `watch` command