Make require("./util").inherits usage more consistent.
Move grepping logic into its own module.

This means we no longer watch all grepped files, but that seems unlikely
to matter much.
Implement ReadFileCache.

This class exists to provide a consistent view of the file system
throughout the build process.
Refactor Watcher and BuildContext to use ReadFileCache.

Most importantly, this allows BuildContext not to depend directly on
Watcher, which allows us to avoid creating a Watcher object when the
--watch option is not passed.