runInTransaction abstract method
Start a transaction, which we assume implements QueryDelegate, and call
run with the transaction.
If run completes with an error, rollback. Otherwise, commit.
Implementation
Future runInTransaction(Future Function(QueryDelegate) run);