Fix file watching
- Rewrote File watcher
- Now only uses a single, global native watcher (instead of n)
- Now only spawns one global thread (instead of 2 * n)
- No longer re-creates watchers for files that are already monitored
- No longer throws exceptions or deliberately crashes on native API errors