Doing so will enable encrypting/decrypting files in a 'pipeline' without
having to write the intermediate results to a file or store them in
their entirety in memory.
This commit also updates the existing storage classes (local and FTP) to
meet the new interface definition.
Doing so can cause inconsistency and cause events to get dropped that
shouldn't. Also add warning to local event side if an event is reported
by the watcher that is not more recent than the event which was
previously the latest local event.
If we don't do this, we don't maintain the invariant that the timestamp
of the latest locally-stored event for a path is the last time this path
was updated. Not maintaining this invariant can cause to incorrect
behavior (i.e. files being deleted when they shouldn't).