check for broken pipe when streaming the output.

For instance, if we give command:
$rust | xargs -v

we get,
xargs: illegal option -- v

usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]

             [-L number] [-n number [-x]] [-P maxprocs] [-s size]

             [utility [argument ...]]

error: internal compiler error: unexpected failure

This message reflects a bug in the Rust compiler.

We would appreciate a bug report: http://static.rust-lang.org/doc/master/complement-bugreport.html

note: the compiler hit an unexpected failure path. this is a bug

task '<main>' failed at 'Unhandled condition: io_error: io::IoError{kind: BrokenPipe, desc: "broken pipe", detail: None}', /Users/abhay/devel/rust/rust/src/

The BrokenPipe (or EPIPE) occurs when the receiving-end process returns non-zero exit-status.

This patch checks if raised condition is not BrokenPipe, and if not, it raises the condition.