Adds traverseM to traverseOps

A utility method for the very common F[A].traverse(f: A => G[F[B]]).map(Monad[F].join) : G[F[B]] pattern.
tuned
Merge pull request #368
round 1: no variance on OptionT
round 2: no variance on EitherT
round 3: no variance in Lazy*T
round 4: no variance in ListT
round 5: no variance in IndexedContsT
round 6: OH GOD SO MANY INTERTWINED TRANSFORMERS
round 7: Kleisli, and while I'm at it, nuke UnapplyCo
round 8: Free, Zap, Co{density,free,product} and IO

Note: IO is not covariant anymore. It could still be, but that would
introduce quite some additional type parameters on its methods.
interlude: minor fixes in core
round 9: no variance in StreamT
round 10: clean variance annotations in effect, example, typelevel