Introduce step

It needs more works! The current implementation just provides
define_single_step API. The internal implementation still uses old
mechanism.