Iterator-based prototype

- The complexity of the runtime layer of the coroutine-based prototype
  just isn't outweighed by the simplicity of the operators.  So this
  is another approach: a set of yielders connected with one another.

- This should provide best of both worlds: like coroutines, the
  operators are connected directly (in the sense that "cat" nodes have
  no runtime equivalent; that is unlike the original code in
  op.cc/op.hh, where cat nodes represent plumbing).  Unlike
  coroutines, the operators themselves are a bit more tricky to write,
  but overall I don't think it's too bad.  There's even a fork/merge
  pair in the prototype, something that would be very tricky to get
  right in the coroutine approach.

- The nice thing about this is that the approach maps naturally to
  iterators, something that was very tricky to implement with
  coroutines.