Add failing tests from github issues.
Reimplement stream backend.

This involves:
  - Totally reimplementing stream redirection.
  - Reimplementing `consume`, `pull`, `fork`, and `resume`.

Backward incompatible;
  - The stream no longer pauses if `next` isn't synchronously called
    in
    `consume`, since this is no longer necessary to signal (lack of)
    demand to the source.
  - Lots of methods and properties that start with `_` changed
    (these
    were private anyway).
  - The callback for the stream generator and `consume` is
    guaranteed
    not to be called a second time until `next` is called.

Fixes:
  - #41
  - #141
  - #142
  - #173