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'm pretty ok with keeping sequence and adding "traverse".  Had to add an "asInstanceOf" for reasons unknown (the bound was Any, not M[T], puzzling), but the tests pass...