provider methods for java

implementation of Semigroup and Monoid lookup by class to simplify usage in java
see #316 
examples:
```Semigroup<Long> sg = semigroup(Long.class)```
```Monoid<Long> m = monoid(Long.class)```