Context injection at the end of body execution

This set of change allows steps with bodies to interact with the nested body start/end flow node, such as eliminating them (which is convenient when a step invokes the body at most once), writing logs, and adding Actions.

This is done by beefing up `FutureCallback` by adding one more callback `onStart()` and adding a method to pass a sub `StepContext` that returns `StepStartNode`/`StepEndNode` as `FlowNode`.

See-Also: https://trello.com/c/xj0fsz7O/92-ability-to-write-to-log-at-end-of-block-step
I think the other way around would be more problematic, because timer can fire before we have the `body`.

Either way, for CPS execution it doesn't make any difference as the actual execution won't start until after the `start` method returns anyway.