Introducing streaming promises

New concept: a promise for an iterable. Iterables include arrays,
objects with an "iterate" method that returns an iterator, iterators
(including generators and Queue).

The `next` method of a promise iterable may return a promise for the
next value, or the value may be a promise.

A new implementation of Queue provides an iterator interface.

`map`, `reduce`, and `forEach` are introduced for performing various
operations in parallel and serial, with input coming from any iterable.

`all` has been reworked to accept a promise for any iterable.

This introduces a degree of conceptual unity around ES6 iterators.  As
such this drops support for SpiderMonkey's original iterators, and all
the corresponding shims.  This patch must land in a
backward-incompatible release, probably v0.10.0.