Adds counting semaphores

An attempt on implementation of counting semaphores requested in Issue #162 , both mutex and java implementations should be working

Two questions about ```reduce_permits```:
first, in Java it is a protected method used (according to the docs[1])  ``` in subclasses that use semaphores to track resources that become unavailable```. Is this method needed?

second, does it make sense to raise an error if doing the reduce would bring available permits below zero? Another approach would be to reduce available permits to zero if anyone attempted to do this

[1] https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html#reducePermits(int)
@jdantonio yep, you are right, I've overlooked it. Functional alternative:
```ruby
def drain_permits
   old, _ = @mutex.synchronize { old, @free = @free, 0 }
   old
end
```