A TransactionOutcome describes an outcome resulting from a transaction. Note that a single transaction can
cause multiple outcomes (for example, a transaction that rolls back two other transactions and then successfully
commits will log one SUCCESSFUL_COMMIT outcome and two ROLLBACK_OTHER outcomes).
Transactions that make it to commit time should log either SUCCESSFUL_COMMIT or FAILED_COMMIT. In addition to this,
various failure modes are tracked; if a transaction failed for multiple reasons, then we do not make guarantees on
which specific outcome(s) that transaction emits. We guarantee that the transaction emits at least one outcome
that is relevant.