Fix GenEvent stream errors and leaking messages

Previously the GenEvent stream was too defensive on its error handling
and would hide when a GenEvent manager exited or the event handler was
swapped.

Previously messages could leak from a GenEvent stream because it did not
wait for the forwarding of events to stop before flushing its message
queue.