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
Change Service interface, so that now we have one start method for each trait (executeStart, validateStart, commitStart and rollbackStart), and do the same for stop (executeStop, validateStop, commitStop, and rollbackStop).

Update tests accordingly. RollbackServiceStateTestCase is marked with @Ignore as it presents broken tests and is under review.
Commit and rollback state change only a single time, and only for whichever state change is going to be committed.
Temp (WIP)