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'll have `BodyExecutionCallback` take `StepContext` as parameters, but the `wrap` is useful because many steps don't care about this callback and would rather pass `CpsStepContext` as `FutureCallback` so that the end of the body immediately ends the step.