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.
I don't think we need to geek out this hard, I think Seq is fine, no use muddling the api