replace ModifiedDocReloader with per-tab FileWatcher