I'm going to defer to you and @dlecocq to work through `run_loop`, whether it's the right approach, and how it relates to the path forward w/r/t gevent, etc.

I obviously have opinions on what the *reader* API should look like, but this connection level API (after the changes mentioned) seems fairly low-level and inline with my expectations.