Generally clean up things relating to Applicative and Monad in Base.lhs
and Applicative.hs to make Applicative feel like a bit more of a
first-class citizen rather than just playing second fiddle to Monad. Use
coerce and GND to improve performance and clarity.
Change the default definition of (*>) to use (<$), in case the
Functor instance optimizes that.