Remove closed/lost conn data from poll_fds/conns.

This is a little tricky in that we have to delay removal until after the
full traversal of the poll_fds array in the runloop since we can't
delete from arrays as we're iterating over them.

This also fixes an issue where we weren't clearing revents on new
poll_fd structs, which was occasionally causing us to try to read from
them immediately even though we had not yet called poll on them. I
wonder if that was causing the ghost reads I had seen earlier.