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.
Hmm... What I'm trying to say is that join and sequence are good primitives for functors that model concurrent computations.  (You could do everything with flatMap but you potentially waste time waiting on operations in order.  With join/sequence, if one of them fails, you can fail the entire thing right away.)  I can take that part out.