unit test for Semaphore

There is another test I would like to see: a permit is not bound to a thread; unlike a lock. So with a lock I can't acquire it in one thread and release it in another. But with the semaphore I can. So it would be nice to have a test that verifies this behavior.

So something like

```
semaphore.init(1)
new AcqiureThread(semaphore).awaitJoined()
new ReleaseThread(semaphore).awaitJoined()
assertEquals(1, semaphore.getPermitCount())
```