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 would only recommend something analogous to Haskell's `liftA2` (you can call it whatever you want) as part of the `Applicative` trait, with a default implementation of `join`/`zip` (whatever you choose to call it) in terms of `liftA2`.  It's easier to write `Applicative` instances in terms of `liftA2`.