NonblockingTransaction
avoids object copying costs when the body of the transaction is known not
to block; the BlockingTransaction
avoids bookkeeping costs
associated with nested transactions when the body of the transaction is
known not to contain nested transactions.