trade in the self-pipe trick for signalfd(2)

I love what you're doing with this framework, and it feels very familiar :)

I saw the signal-to-self-pipe and thought of signalfd(2), and made this change before reading about the PyPy-friendliness and zero external dependencies goals in the docs. So go ahead and reject this, but I wanted to at least show you this change. Too bad sigprocmask and signalfd aren't wrapped anywhere in the stdlib.