Fix: Allow ruby green threads to continue while waiting on semaphore

First, thanks for a great library.

These commits allow Ruby (green) threads in each process to continue
processing while one (or more) threads are blocked waiting on a semaphore.

The fix is simple: to attach the C-library waiting functions to ruby with FFI's
`blocking` flag, which is designed for exactly this purpose.

These commits include tests that fail without the fixes, and implementation
for both Posix and Mach.

Regards,
-Marc