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
Could be `final`.