Add FreeMonoid and FreeGroup

This adds 2 new number types: the `FreeMonoid` and `FreeGroup`.
Do you have an example of an implementation of the run method that returns an Either[A, A]? I'm not sure I quite grok how it'd work