Use derived Typeable/Data when possible

This is possible as of GHC 7.7.