Add FreeMonoid and FreeGroup

This adds 2 new number types: the `FreeMonoid` and `FreeGroup`.