moved semigroups and monoids to another class, added a monoid for combining Maps when map value is a semigroup
small refactoring
trying Enumerable and Bounded...