Use new promise-based step stream. Streams use promises to manage
asynchronous iteration and backpressure, and also understand ES6
iterables/iterators.

Reduced API for initial version, but can be expanded as necessary.