Implement semaphore mutex

Improve interface documentation and note restriction on Unlock().