add support for snapshots, with tests

Also, a minor bug fix: iter_make() is aware of any read options passed to it. I needed this to pass the snapshot to an iterator.