A more complete implementation of `await for`.

Add support for cancellation of the stream.  The stream with
subscription s is canceled as if the loop were surrounded by
`try {...} finally { await s.cancel(); }`.