Add FreeMonoid and FreeGroup

This adds 2 new number types: the `FreeMonoid` and `FreeGroup`.
Let's use `:::` here since we know we have lists, and I feel like that may be slightly more efficient.