Add Functor,Applicative and Alternative instances

Add instances to comply with the Applicative-Monad Proposal
Derive Alt standalone to support GHC roles
Write explicit instance Alt f => Alt (Alter f)