Rename link() to setup() (silly name), extract new link() out of it, implement endWhenAny() properly (by linking).
Change rest of tick(2)'s from tests to just tick().

(Now that end() of the derived stream happens within the same tick.)
Clean up.
Test link().
slice().  Prevent streams from ending twice (what an amateur mistake!)
reduce(), collect().