kqueue FileSystemWatcher doesn't handle subdirectories

Reimplemented much of the kqueue-based file watcher so that watching subdirectories works.

https://bugzilla.xamarin.com/show_bug.cgi?id=16259