derive Generic,Generic1 on almost everything (for appropriate GHC versions)

This will close #23. There are two things you should check before merging:

- Which `^+^`, `^-^` methods do you want to use when Generics is available
- `deriving (Generic1 V)` only works on HEAD, which I don't have (and therefore didn't test)

See commit messages for details

I couldn't derive Generic for `Coincides` because it's a GADT.