Extract executor specific tests from execution_plan test
Pass the execution_plan in PlanStep#execute

We really need execution_plan only for PlanStep#execute, therefore no
need to pass it in the constructor. It leads to much more unified
behaviour of all the step classes, deserialization etc.

Also we got did of the ugly allocate when deserializing due to cyclic dependency.
Unify steps storage

There was no point in storing the hash of steps separately for plan
and run steps (and possibly for finalize steps), since there is
no different usage for them: finding a step by id.
Defensive programming
Support for finalize steps in planning and execution.

While working on this I've removed run_step_id and finalize_step_id
because they were not set before the steps execution, were not used
anywhere and caused useless difference between run and finalize phase,
that complicated the unification.
Add the references to plan, run and finalize steps to action