Transactions refactoring

This includes #16283 + 3 more commits to add a transaction stack and to keep the same public API.
My idea is to deprecate all transaction methods from the `connection` and offer the use of `connection. transaction_stack` instead. So we can slowly remove transaction concerns from the connection object.
The idea is also to instead of having the `Transaction` object that points to its parent, we have a `transaction_stack` which holds all transactions. Thus we can pop transactions before calling methods like `commit_transaction`, and if they raise an error, the transaction was already popped from the stack.

review @jonleighton @chancancode @rafaelfranca @tenderlove @spastorino
Is this meant to be public? It doesn't look like we are using it anymore. (There were a few test cases, but I think those can be replaced by checking if there is an open transaction.) There might be other use cases I didn't consider though.