More robust solution

The first commit stored the transaction object using a
ThreadStaticAttribute on a static field. but after researching this
solution it turns out not to be entirely reliable in asp.net
applications.

The new approach is almost identical except that you have to pass the
transaction object to the DAL method to execute  using the transaction.
This approach will work on any platform web or client, and will not lead
to strange results and corrupted data somewhere down the line.