Reuse file watcher hash

This PR includes the following:

* Reuse sha1 hashes calculated by the file watcher, a small optimization which reduces the amount of time spent calculating hashes of large files in `public`.

* A refactoring of the bundler into smaller functions.

* A tiny profiler package.

* Profiling calls added to profile the bundler.  This commit contains only adding profiling calls, so it could be reversed without changing the functionality of the system.