Make .onEnd() bind it callback's `this` to the stream, not the end stream.

This might bite someone at otherwise.
Make `fromArray` work like generators should (see below):

With an array of size `z`, ticks 1-n should call the `.forEach()`
listeners with values 1-n, and tick n+1 should call `.onEnd()` listener
with the last value.

Previously, the `.onEnd()` handler (and the corresponding updaters of end
stream's dependencies) were called at tick n+2 (the `.end()` was only
scheduled during tick n+1), which was a bit awkward.

This implementation also serves as a sketch of how to implement
generators.  (Spoiler: they override `.ended()`).