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.
Better?  I'm trying to give a simple and concrete motivation as to why one would care about this typeclass.

/**
 * Simple implementation of an Applicative type-class.
 * There are many choices for the canonical second operation (join, sequence, joinWith, ap),
 * all equivalent. For a functor modelling concurrent computations with failure, like Future,
 * join can save a lot of time vs flatMap. (Given two operations, if the second fails before
 * the first completes, one can fail the entire computation right then. If one used flatMap,
 * one would have to wait for the first operation to complete before failing it.)
 */