Major cleanup: throw alot away, reimplement DirWatcher