stream: Fix incorrect error throw when pipe'ing

Specifically, if an error listener is attached to a stream _before_ it is piped to, _and_ it cleans up efter itself by removing the error listener, the pipe logic will miss this and throw as if it was unhandled.

I'm not sure this is the best way to fix it, but I don't really see any other way with the current EventEmitter interface.

As far as I can tell this error handling error has been there since 0.4.