Start to add dispose() infrastructure, that propagates dispose
function forward, and uses end signal to execute it. Fan-in type
streams, like merge, zip, concat, etc. don't yet support disposing
their input streams, but will in an upcoming commit.

Several performance improvements for merge and zip.