Cleanup Transaction inheritance.

Transaction class doesnt need to encapsulate the transaction state using
inheritance.
This removes all Transaction subclasses, and let the Transaction object
controls different actions based on its own state. Basically the only
actions would behave differently are `being`,`commit`,`rollback` as they
could act in a savepoint or in a real transaction.
Merge pull request #16364 from arthurnn/make_transaction_one_class

Clarify Transaction responsibilities by breaking unneeded inheritance hierarchy.