Refactor engine internals

In this change we:
- introduce single graph action, that works with futures
- split methods of TaskAction into schedule/complete parts,
  with schedule* returns future;
- task executor became entity that manages Executor, instead
  of engine + graph action.

Change-Id: Ic0704534391abdd566bf2d87adabef43a9c88cfb