* Fix early tap closure. If a tap was closed, while items was still waiting to be sent upstream, it would cause an unhandled
BrokenResourceError to be thrown. Now, if all taps are closed, the immediate upstream iterable will be closed, and the pipeline
will stop processing any further items. Any upstream sections will be expected to handle downstream channel closures gracefully.