Don't hold up the entire event queue for a single bad event.

Also, don't retry forever.

Make error types easier to introspect on.

Closes #2428.