every dependency can be added only once
Revisited TaskControllerImpl.dependentAdded() method.
 * We allow dependents adding only in EXECUTE_WAIT, EXECUTE, EXECUTE_DONE, TERMINATE_WAIT & TERMINATE task controller state.
 * Fixed dependentAdded() switch statement accordingly.
optimization - removing unlikely() method
 * it saves one wrapping method call around boolean expressions
 * if statements without unlikely() are also human reader friendly
 * 'if statement' followed with 'throw new' phrase is sufficient
   to recognize that such condition(s) is(are) unlikely
Propagate ROLLBACK_REQ from parent to chilren tasks
When task controller child is terminated, decrease both unfinishedChildren & unvalidatedChildren.
The idea of the fix is the same as the one documented in commit 0ba5c2f44951472dc0a838edfb0cf4c9950dcdbf
Children should start committing after parent task is committed.
child tasks can be added at EXECUTE state only
Implement child cancellation if parent task is cancelled.
Parent task sends VALIDATE_REQ, COMMIT_REQ and ROLLBACK_REQ to its children.
Thus if parent dies, there's nobody to command these orphans :(

I also removed thread.interrupt() calls - it was sometimes blocked
in interrupted0() method for unknown reason causing JVM to freeze.
Various task ordering fixes and implemented missing parent-child interaction bits.

In previous implementation it was possible that transaction entered prepared state
even if some of its children task validations were not yet finished. The reason
was child validation requests were sent too late and we didn't wait for them to be finished.

We're fixing this by introducing new VALIDATE_CHILDREN_WAIT task controller barrier state
where we're waiting for all children to finish their validation before reporting
validation is done to parent task.

According to our IRC discussion with David I decided also to order the validate phase
like from dependent -> dependency PoV so also from parent -> child PoV.
The benefit we're getting from this well defined validation phase orderings is
it will prevent long executor queues if there are hundreds of ordered tasks
in the transaction. Thus since now on the following task orderings are guarenteed:

For dependent -> dependency relationship:
 * dependency executable is called first, dependent executable second
 * dependency validatable is called first, dependent validatable second
 * dependency committable is called first, dependent committable second
 * dependent revertible is called first, dependency revertible second

For parent - child relationship:
 * parent executable is called first, child executable second
 * parent validatable is called first, child validatable second
 * parent committable is called first, child committable second
 * child revertible is called first, parent revertible second

Detailed fix description:
 * Introduced new VALIDATE_CHILDREN_WAIT task controller barrier state.
   The new validation phase ordering is like this:
   EXECUTE_DONE -> VALIDATE -> VALIDATE_CHILDREN_WAIT -> VALIDATE_DONE where:
    - we're moving from EXECUTE_DONE to VALIDATE state if and only if
      all our children and dependencies were executed plus (and this is new)
      all our dependencies were validated
    - when entering VALIDATE phase, we're starting our validation
    - we're moving from VALIDATE to VALIDATE_CHILDREN_WAIT once our validation is finished.
      On entrance to VALIDATE_CHILDREN_WAIT we're sending VALIDATE_REQ to our children
    - we're moving from VALIDATE_CHILDREN_WAIT to VALIDATE state if and only if
      all our children finished validation
    - on entrance to VALIDATE state we're sending VALIDATE_DONE notification event to our parent
 * Modified ROLLBACK_WAIT task controller barrier state.
   On entrance to this state we're propagating ROLLBACK_REQ to our children.
    - we're moving from ROLLBACK_WAIT to ROLLBACK state if and only if
      all our dependents have been terminated and all our children have been terminated
Various test case fixes and enhancements:
 * implemented initial task child test cases
 * renamed some test cases
 * fixed transient failure in TransactionsTestCase