Tag index

Just starting on this, not for merging yet, but feedback welcome.
Yep. Everything in a `tx` will be atomic. If it doesn't reach the end of `Tx.Commit()` then everything that happened in the transaction will rollback.