[semaphore] Fix mono_sem_wait() for Darwin, clean up mono_sem_post().

semaphore_wait() never returns -1, but returns KERN_ABORTED if the
call needs to be repeated.  This caused a semaphore wait to sometimes
return in the SGen workers code when it shouldn't, which caused a
mysterious assertion failure.