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