only use {GHC.Generics, DeriveGeneric, DefaultSignatures} for GHC 7.2.1 and greater

Note: Since many instances of Vector were using this mechanism for ^+^ and ^-^, these have been written by hand. These methods were written inside #ifndef USE_GHC_GENERICS so as to use DefaultInstances when available. It's unclear to me if this is preferable.
derive Generic, Generic1 on everything (except Generic1 V which is done in a different commit)
derive (Generic1 V) for GHC >= 7.7

This Generic deriving is handled separately from the others because of GHC bug: https://ghc.haskell.org/trac/ghc/ticket/8468 which is fixed in GHC 7.7. I have not tested this patch because I don't have a GHC 7.7