add check-gen-type-classes Task
ListT#headOption should be OptionT

This is a breaking change to the API, but it makes it more consistent with similar methods on other monad transformers, such as EitherT#toOption or OptionT#toLeft.

Also, it will break old code in a very obvious way with a compile error that can be fixed by adding a `.run`.
Change EitherT from a sealed trait to a final case class
ListT should be final instead of sealed

Extending a case class is generally troublesome, and we aren't trying to anyway.
Change UnwriterT from sealed trait to final case class
Change WriterT from sealed trait to final case class
Change Coproduct from sealed trait to final case class
use implicit val instead of implicit def
Merge pull request #442 from xuwei-k/check-gen-type-classes

add check-gen-type-classes Task
Merge pull request #444 from ceedubs/traits-to-case-classes

Case-classify traits
Merge pull request #445 from ceedubs/listt-headoption

ListT#headOption should be OptionT
Merge pull request #447 from xuwei-k/implicit-val

use implicit val instead of implicit def