Graph action refactoring

* get rid of dependency counter in graph action:
  analyze graph directly instead when we need to determine nodes we
  need to execute or revert next;
* move graph interpreting to separate class, GraphAnalyzer:
  instead of inheriting this code from base graph action we now use
  composition;
* get rid of direct dependency of graph action on engine.

Relates to blueprint smart-revert
Co-authored-by: Ivan A. Melnikov <imelnikov@griddynamics.com>
Change-Id: Ib6499d2f2d5b568d7f2a45af3c5ed6d8d9ace39b