only use recursive watchers on macOS and windows (#4100)
### Description
Only windows and macOS support real recursive file watchers, other OS
emulate it by walking the directory structure and watching all
directories. But that might be really slow and use up a lot of watchers,
so we don't want that. Instead we know exactly which directories are
used and can watch selectively directories when they are accessed.
* only use recursive watchers on macOS and windows
* fallback to non-recursively watch read directories on other OS
Note that this implementation still has some bugs when renaming folders,
but we can probably figure out these edge cases later...