Added StepExecutor class to allow users to add custom logic before/after each step.

See discussion in pull request #164 .
Wouldn't this cause your deadlock again? I thought the idea was to swap out the async run with the custom one

Haven't fully thought through this