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.
Make cycle detection run only for down services
Fix inconsistency in *Children count fields, for both Transaction and TaskControllerImpl.

Some of these fields are being decremented more than once, which will result in negative indexes and can cause behavior problems when cancelling a task with forceCancel.
Avoid NullPointerException on TaskControllerImpl.executeTasks whenever FLAG_SEND_DEPENDENCY_DONE and FLAG_SEND_CANCEL_DEPENDENTS are both set.
At TaskControllerImpl.forceCancel, prevent hard to find bugs by making sure the task is at a valid state.

The operation must be idempotent, given that internally a duplicate cancel request could occur when reverting a service state.
Fix race condition where a transaction requests children to prepare before one or more chidren are done cancelling.

This scenario occurs when a child is requested to cancel and, before child is done cancelling, transaction is requested to prepare. This scenario can result in several abnormalities, such as the rolling back transaction attempting to create other tasks or to cancel other tasks, both invalid operations.
cancellation requests (
At TaskControllerImpl, add forceCancel() method and make both forceCancel and forceCancel(boolean) package-protected methods.
Make TaskBuilder.addDependencies signature more user-friendly.
Make start and stop tasks revertible, thus simplifying service controller implementation and allowing clean rollback of service state.
Delete Service.commitStart and commitStop methods.
Make tests easier to debug by avoiding that an exception goes unotified because commit was not invoked.
fixing ClassCastExceptions
Remove unneeded TaskFactory parameter from ServiceControllerImpl.dependentStarted
Do not invoke getTaskFactory on revert and, also, check if it is null on ServiceController.transition.