'Send zfs stream of contents.
:param list remote_snapshots: ``Snapshot`` instances, ordered from
oldest to newest, which are available on the writer.  The reader
may generate a partial stream which relies on one of these
snapshots in order to minimize the data to be transferred.'

@contextmanager
def reader(self, remote_snapshots=None):

    snapshot = ('%s@%s' % (self.name, uuid4()))
    check_call(['zfs', 'snapshot', snapshot])
    local_snapshots = list((Snapshot(name=name) for name in _parse_snapshots(check_output((['zfs'] + _list_snapshots_command(self))), self)))
    if (remote_snapshots is None):
        remote_snapshots = []
    latest_common_snapshot = _latest_common_snapshot(remote_snapshots, local_snapshots)
    if (latest_common_snapshot is None):
        identifier = [snapshot]
    else:
        identifier = ['-i', u'{}@{}'.format(self.name, latest_common_snapshot.name).encode('ascii'), snapshot]
    process = Popen((['zfs', 'send'] + identifier), stdout=PIPE)
    try:
        (yield process.stdout)
    finally:
        process.stdout.close()
        process.wait()
