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)
This method is non-atomic, since you're testing something outside a lock and after that you take an action.
BTW, it's very tricky to fix it here, the best way is conforming to Java Api, without this check at all.