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.