Ensure the callbacks for write operations (including their index fixups)
run before any file-watcher callbacks caused by that operation. This
prevents race condition bugs, e.g. files saved to disk might appear to be
conflicting changes, or renames might be treated as a delete-add pair without
fixing up the index more cleanly.

Also:
- add helpful toString() for File/Directory objects
- clarify FileSystemEntry.rename() argument