Suspends the transaction in a finally block

since we must uphold the contract where the transaction must have been
suspended no matter what happens before leaving that method.
Removed unnecessary deprecation annotations
Throws more specific exceptions from TxManager#resume

There are two possible failures that can happen in #resume:
 (1) The current thread has already got another transaction associated with it
 (2) The transaction to be resumed is already associated with another thread

These two failures got their own exceptions: ThreadAssociatedWithOtherTransactionException and
TransactionAlreadyActiveException so that callers can react appropriately
to the two scenarios. Typically there's special handling of (2). Doing
this made UnableToResumeTransactionException redundant, and it was too
generic to begin with as it represented both (1) and (2).

This commit also tidies up and corrects logging regarding old transactions
on the master which are to reaped, so less logging and more relevant
logging there.
Removed unnecessary deprecation annotation
Initialize transactions on master as late as possible.

o Remote transaction is no longer created on enlist, because read transactions are now enlisted as well, plummeting performance.
  Instead, the slave tracks a flag for whether the remote transaction is initialized or not, and then only initializes on two points,
  either when the first lock is grabbed, or right before the transaction is pushed to the master.

o This part of the code can be further refactored once JTA becomes an orthogonal concern and the domain logic for HA is all contained
  in one data source. Until then, this will hold the fort. For an intro to the conundrum here, see the comment in TransactionState around
  the methods tracking if the remote tranasction is initialized.

o Added Monitors and test for HA slaves pull update behavior.

--