Use file modification time, not size, to determine whether changes exist.
Watch files for updates in addition to adds/removes.

When file content is updated, also check metadata. Also, whenever a file
is newer than its .mdcache file, we should ignore the cached data and
regenerate it.

Tested by adding some logging and adding/removing/updating files.
- Use both size and mTime when determining if files have changed, since the latter has second-granularity.
- Don't re-enqueue the file modification event. This can deadlock the channel buffer. Instead, rely on the next file event to trigger a metadata update.

Tested by running: `yes | head -n 50000000 > somefile.txt` while distributor ran.

Previously, the channel buffer would fill up and get stuck. Now, it
generates the proper metadata (same hash) whether the file was present
in the directory before distributor was started or if it is added
incrementally.
Merge pull request #4 from mattspitz/watch-updates

    Watch files for updates in addition to adds/removes.
Adding /serve_last_updated endpoint.

Keeps track of files by modification time, not size, when computing
metadata. File content can change in place without changing the length
of the file.

Also, added /serve_last_updated endpoint, which returns the info for the
file that was most-recently modified.
Allow querying a specific watcher by basename of the provided directory.