Fix Trac #2130: improve derived Ord for primmitive types
This patch does two things:
* (Minor): in TcGenDeriv.careful_compare_Case, test for less-than before
equality. This should reduce the number of dynamic tests, and also gives
more scope for optimisation, since less-than tells us more than equality.
* (More important): add special-case derived code for data types that are
simple wrappers of primitive types. See
Note [Comparision of primitive types]
This fixes Trac 2130.
However see also Trac #2132, which is not addressed here.