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.
I think changing from size to mtime will expose the race condition that the size check prevented against. Admittedly, it's a race condition that is still possible with the old code, but not in our particular usage of it.

In essence if a file is modified at some point forward of when we've started calculating the metadata, we need some way of knowing that has happened. The only perfectly correct way of doing that is to use the information we get from the fsnotify system, but we don't actually properly use it right now.

The size check is a hack that saves us from the situation that prevails during our usage: when we drop a new file in the folder in a non-atomic fashion, the file starts getting written and the size will progressively increase. Switching to mtime seems less safe for that particular case, since mtime is only second-granular?

Probably the correct thing is to say 'if any fsnotify events have triggered for this file since we began calculating the metadata, then discard our metadata'. Is there a way to do that that isn't racy?