Replacing Transactions.waitFor() wait-and-notify mechanism with completion listeners approach
Eliminated InterruptedException usages
Rewritten TransactionalLock.lock() method to be completely asynchronous.
Previous implementation was relying on wait-and-notify builtin mechanism in
Transations.waitFor(txn1, txn2) method.
Transaction.canCommit() method must throw ITSE if transaction is not in prepared state
forbid locking outside of execute phase