Propagate errors backward correctly for more cases.

In particular, closing or aborting the destination stream before the source is exhausted but after the pipe is established now correctly propagates cancellation reasons back to the source.

Part of #129.