Start testing the ParallelTaskPlanExecutor:
 * push common test cases from DefaultTaskPlanExecutor up to new base class AbstractTaskPlanExecutorTest
 * extract logic to create test tasks to new class ExecutorTestHelper + extend logic with option to make make task execution block with CountDownLatches
 * start new ParallelTaskPlanExecutorTest class with 2 new test to verify execution order with 2 worker threads
Keep track of active task mutexes in AbstractTaskPlanExecutor and honour them on determining next task to execute:

* introduce new MutexManager class: to thread-safe manage active task
mutexes during execution of a TaskExecutionPlan
* TaskExecutionPlan.getTaskToExecute(): add arg mutexManager
* DefaultTaskExecutionPlan: extract checking of "ready to execute"
conditions to new method + add a condition for claiming the mutex
* AbstractTaskPlanExecutor: keep one instance of MutexManager for all
worker threads