some io.Watcher refactors