Fixed race condition in Watcher.Close()

* Added done channel
* Use buffered channels for all other channels
* Removed type Subsystem