Add comment explaining internal state.
Clean up state management in Poller; move state to PollEventSource.

A PollEventSource object is responsible for managing all state related
to using epoll with a stream. In particular, it manages the current
epoll mask, stores the fileno and stream, and stores read and write
handlers. This removes the need to add multiple overlapping maps to
Poller when we want to track something else. No changes to public (i.e.,
used) API, no functional changes.
Add docstrings to PollEventSource.
Add comment explaining Poller.lock.
Rename functions that rely on Poller.lock to be self documenting.

unsafe_* => caller needs to obtain Poller.lock before calling this
function.
Add docstring for Poller.
Minor change to Poller docstring.
Rename has_stream to unsafe_has_stream.

Since callers can make control flow decisions based on the results of
has_stream, it seems important to clearly communicate the semantics of
has_stream, which requires that we use the unsafe prefix.
Add more documentation to Poller.
Add Poller.delete_stream; locked way to remove a stream from Poller.

Supports client code that handles disconnects.
Change order of events in unsafe_remove_fd.

Remove PollEventSource from global state before attempting to modify
epoll. Then, if epoll throws an error, internal state is still cleaned
up.
Use delete_stream instead of del_all where appropriate.
Be specific about what we're handling in try/catch.