Added support for semigroups

* Added generic functionallity around semigroups
* Added pre defined semigroups for:
  + numberAdditionSemigroup
  + numberMultiplicationSemigroup
  + numberMinSemigroup
  + numberMaxSemigroup