Ensure a DatasetGraphTxn is for a write transaction.
If the transaction is already a write transaction, this is an efficient no-op.
If the transaction is a read transaction then promotion can either respect the transactions current
view of the data where no changes from other writers that started after this transaction are visible
("serialized" or "fully isolated") or the promotion can include changes by other such writers ("read committed").
However, "serialized" can fail, in which case an exception
TDBTransactionExceptionis thrown. The transactions can continue as a read transaction.
There is no point retrying - later committed changes have been made and will remain.
"read committed" will always succeed but the app needs to be aware that data access before the promotion
is no longer valid. It may need to check it.
Return null for "no promote" due to intermediate commits.