[PROPOSAL] Merge `deepseq-generics` into `deepseq`

**Formal proposal to `libraries@`: http://permalink.gmane.org/gmane.comp.lang.haskell.libraries/23031**

This also replaces the existing `rnf x = seq x ()` default
implementation with a `Generics`-based `DefaultSignature` `rnf` method
implementation

This requires to drop support for GHCs older than GHC 7.2 to avoid
conditional exports due to lack of `Generics` support
> If the user uses generic deriving to define an NFData instance for a record type which has one uninhabited field, will we get a compile time error?

No, that solely depends on whether your uninhabited type has an `NFData` instance.

The `V1` instance is only needed in order to auto-derive an instance for a type like

```hs
data Void deriving Generic

instance NFData Void -- this will fail because because no `V1` instance
```

Such a `NFData` instance would be quite unsound IMO, as you statically now there can't be ever a value of type `Void`, so `rnf (x::Void)` is not a well-defined thing, and we can catch that at compile time, so we should.

It's still possible to write a manual `NFData` instance for those few cases where you as a programmer take over the burden of proof from the type-checker (or defer it to a runtime error), and can define either

```hs
instance NFData Void where rnf _ = error "rnf Void"
```

or

```hs
instance NFData Void where rnf _ = ()
```

and hence make a conscious choice for this questionable instance.