Implement a non-blocking Semaphore object option..

There are no unit tests for this because the current non-blocking Lock unit tests fail, so I wasn't sure how to do a non-blocking Semaphore unit test. I'm happy to write one, but I'm not really good with unit tests in general so I'm not sure how to do it.

In the mean time, please review this code and let me know what you think.