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)
I tried to make it consistent with the Java api and it should return the number of drained permits.