Making call to Transaction.Commit Explicit

Transaction.Commit was only called from the destructor. This isn't the
correct place to call commit, since the transaction might never be
disposed.

Instead, Transaction.Commit is now called inside the
TransactionContext.Run method implementations.