Add support for generating incremental streams when pushing volumes

This partially addresses #46 - but does not completely resolve it.

Added here is support for a new parameter to `Filesystem.reader` to specifying which snapshots the receiver has.  The implementation uses this to generate an incremental stream if possible.  Also added is `IFilesystem.snapshots` which can be used to get a value to pass for this parameter.

Work to glue this together with the actual push implementation will come in a follow-up.
It's not part of this branch, but I find the `reader` / `writer` names a little confusing. I associate `reader` with the receiving end and `writer` with the sender. Do you think `sender` and `receiver` might be better names? For another ticket perhaps.