Catch stream errors with explicit handlers instead of relying on the domain.

Adding a stream to a domain only catches errors emitted from that stream if
there are no other error listeners on that stream. This meant that adding the
reporting error listener caused the domain to not catch any errors. Now, we
add explicit handlers to the stream to catch emitted errors, while relying on
the domain to catch thrown errors.