Improve the desugaring of RULES, esp those from SPECIALISE pragmas

In the code for Trac #8331 we were not getting a complaint, but
we *were* getting a terrible (and virtually useless) RULE, looking
like
   useAbstractMonad (complicated-dictionary-expresion) = $fuseAbstractMonad
where we wanted
   useAbstractMonad d = $fuseAbstractMonad

This commit improves the desugaring algorithm.  More comments
explain; see Note [Drop dictionary bindings on rule LHS]