Parameterize the step monad by an Input_monad. This allows the step testbench to control both Cyclesim and Event_driven_sim simulators.
Implement an Imperative step monad interface. Rename the previous version to the Functional step monad. The imperative style no longer controls or constrains port access to the underlying simulator. It is simpler to use (especially spawning sub tasks), but arguably less safe.