Connection closing/reset error handling (#44)

- Clean up KQueue issues found when troubleshooting #44, checking for socket EOF in flags to detect connection reset
- Remove sockets from KQueue when in error state
- Change behavior when there is a poll exception list
- Handle socket connect errors more cleanly
- Handle bug for how we pull the error string from an exception in IO.on_error
- Re-raise exceptions causing the exit of Connection or Channel so they can be cleanly caught