Don't reset cursors during transaction begin or commit

This is an API change to allow cursors to iterate and perform explicit transaction on each record (assuming the transactions commit).

The main reason we didn't do this before was that we cleared the `snap_min` value published by the transaction when it committed, which is the mechanism that protects old versions of data.  Cursors could be pointing to an older version of some record at begin / commit time, so this change has to take that into account and only reset the published `snap_min` value if no cursors are positioned.