Use AutoDeriveTypeable where appropriate

See SPJ's [comment](https://ghc.haskell.org/trac/ghc/ticket/8950#comment:7) for details on how `AutoDeriveTypeable` works.

The user will still need to include at least the following somewhere until a newer `base` is released (see [here](https://ghc.haskell.org/trac/ghc/ticket/9111)):

```haskell
{-# LANGUAGE DataKinds          #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE PolyKinds          #-}
{-# LANGUAGE StandaloneDeriving #-}
deriving instance '[]
deriving instance '(:)
```