Refactor TransactionFrame to be immutable
TransactionFrame and TxSetFrame have interfaces that do not satisfy the criteria of "easy to use correctly and hard to use incorrectly". Specifically, these classes would be much more intuitive if they were immutable.
I think for both, we should discern production and testing use cases:
for prod, everything should be immutable, so "results" (in transactionframe) for example, should not be a member variable.
for testing, it's fine to have mutability, but we should make sure to isolate those member variable/functions with the #ifdef BUILD_TESTS (or better, move the functionality in test only classes, like it may actually be convenient to have a "transactionframe" equivalent that has both a transaction and its result).
Work on TxSetFrame was done.
Work on TransactionFrame??? is left.
There might be more to it than just TransactionResult -> easiest might be to move everything mutable into a TxResultContext object (that contains TransactionResult and also things like mCachedAccount).