Add FreeMonoid and FreeGroup

This adds 2 new number types: the `FreeMonoid` and `FreeGroup`.
Sure, honestly we can drop the whole thing. The idea was to obviate needing an `Option` or `Either` by using `MonoidMember` or `GroupMember` instead. It's really not a big deal, so if it doesn't grab your fancy, just ignore it!