Add Applicative and Functor as superclasses of Monad

The choice of Applicative methods is probably the most controversial part of this PR (if it is at all).

I think I maintain source compatibility for everything Monad.scala.
Yeah TraversableOnce is a little restrictive.

def traverse[T[_] <: GenTraversable[_], X](xs: T[M[X]])(implicit cbf: CanBuildFrom[T[X], X, T[X]]): M[T[X]]

might work, but I'll be damned if I can get the fold to typecheck.