Use read/write locks for construction of the final dependency graph.
Value specifications (and properties) are normalised - compare by identity.
Use a more efficient iterator over digest based resolution candidates.
Guard against possible NPE if finished state happens near a discard.
Start work to separate the execution plan and source of actual jobs from the states used to create it.
Refactor graph execution logic to separate into planning and execution. Applied to SingleNodeExecutorFactory. DependencyGraphExecutor interface no longer generic.
Skip the test if null is passed.
Recognise currency targets.
Merge commit '2eccd85da8f4cca07b410ad7808d71d2e583dd2a' into topic/EXECUTION_PLAN
Refactor MultipleNodeExecutor into the ExecutionPlan pattern.

Don't use a queue coupled into the executor to pass result fragments into the cycle - call methods on the cycle directly which can in turn mark the node execution states.

Tests currently fail.
Merge commit '9c2ec9f2ec5b354e0e1ac26b1669b8e68c73e8b3' into topic/EXECUTION_PLAN
[PLAT-3584] Fix compilation errors from unit tests.
[PLAT-3584] Only issue a fragment if the execution is incomplete.
[PLAT-3584] Unit test for ExecutingGraph and fix for errors found.
[PLAT-3584] Unit test for the MultipleNodeExecutorFactory class.
[PLAT-3584] Test for, and correct, behaviour of ExecutingGraph.isFinished
[PLAT-3584] Unit test for, and corrections to, PlanExecutor
[PLAT-3584] Increase test coverage of package
[PLAT-3584] Increase test coverage of package
[PLAT-3584] Increase test coverage of package
[PLAT-3584] Increase test coverage of package and fix errors found.
[PLAT-3584] Recognise job tail notifications