Semigroup

Added Semigroup.

Then made the Monoid inherit from Semigroup.  This seems to make the most sense to me mathematically.