File change watcher refinements

- increment all file version on an `OVERFLOW` event since these are only generated if there were too many file change events
- make sure watch keys that are no longer valid (i.e. the directory no longer exists or it couldnt be reset) are cleaned up
- logs a warning if a watch key could not be reset but the file still exists