Avoid writing to the unblocker pipe if it’s full

This requires locking around the read, unfortunately. Since we must be sure that the IO.select call and the write_nonblock is done without the read being interleaved (because that could mean that we don’t write the the pipe even when we should).
Use the unblocker state directly instead of calling #closed?

This is a tiny performance optimization, and it feels ok to use the state variable internally in the class.