Don't call .schedule() from .step() unless required.
Don't call .schedule() from .step() unless required.

Execution by repeated calls to .step() shouldn’t result in more calls
to .schedule() than by calling .run().

Also sort out return values (and documentation thereof) for both
.step() and .run().

NeilFraser/CodeCity,google/CodeCity,google/CodeCity,NeilFraser/CodeCity,google/CodeCity,NeilFraser/CodeCity,NeilFraser/CodeCity,google/CodeCity