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
This seems very weird. I would expect `onStart`, `onSuccess`, and `onFailure` to simply be given `StepContext` as a parameter. (Which would mean we do not implement `FutureCallback` any more, but that seems fine to me.)