Transaction changes

Backing out making public overloads of functions that accept
Transactions as parameters. There are too many places that require a
Transaction, so it would clutter up the interface to pass the
Transaction all the way through.

Instead, TransactionContext was made abstract, and has a static property
called Current, which returns the current TransactionContext instance.
So instead of calling TransactionContext.Run directly, you call
TransactionContext.Current.Run.

This allows calling application to use a single Transaction throughout
the entire application. I.e. the Transaction constructor is only ever
invoked once.