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
We use `open_transactions` on https://github.com/arthurnn/rails/blob/transactions/activerecord/test/cases/fixtures_test.rb#L607 . And I know, for sure, we use that method in Shopify code too. I would say this method should only be on the `trasaction_manager`, and we deprecate the one from the connection.