Move thread locals from instance to class method

It is difficult to use a transaction object that is not the current transaction, since completing it clears the current transaction.

By moving to Transaction.create and Transaction.complete!, the two methods that modify the current transaction are both class level methods, while any given transaction simply knows how to complete
itself, without managing any global state.

This makes it possible to start a transaction while a current transaction is already assigned, which is something we wanted because we want to proxy an exception coming from somewhere else (ie, from
outside of the current transaction).