Add FreeMonoid and FreeGroup

This adds 2 new number types: the `FreeMonoid` and `FreeGroup`.
Would it make sense to have another run method that takes `Semigroup[A]` and returns `Option[Either[A, A]]` ?

For that matter, would it make sense to use our own sealed traits for free structures? E.g.

```scala
sealed trait MonoidMember[+A]
sealed trait GroupMember[+A] extends MonoidMember[A]

case object Identity extends MonoidMember[A]
case class Member(a: A) extends MonoidMember[A]
case class Nemesis(a: A) extends GroupMember[A]
```

The only reason I suggest that is that it avoids additional nesting in the `Option[Either[A, A]]` case, and possibly allows us to put some combining logic in the members.

What do you think?