I have no particular issue with moving Contravariant into base.
That said, DeriveContravariant doesn't work out as well as you'd think. See the discussion in here:
https://github.com/ekmett/contravariant/issues/17 (There were other, longer discussions elsewhere that were er.. more of a discussion, but they were mostly on places like #haskell-lens which aren't logged and I can't find them at the moment.)
With covariance you can just ignore that contravariant cases exist and get reasonable deriving.
With contravariance composition of contravariant functors is covariant. You have the f (g a) problem. Which of the two is contravariant? This doesn't arise solely from type arguments. When faced with a concrete data type, you can't just look for a Contravariant or Functor instance for it, because both might be available (think Proxy). So the whole extension becomes a bug-addled mess.
e.g. There are two sensible Contravariant instances for Compose, but neither one is canonical.
The other DeriveFoo definitions all do reasonable things. This can't do a reasonable thing in any non-trivial situation.