Reorganise TcSimplify (again); FIX Trac #1919
This was a bit tricky. We had a "given" dict like (d7:Eq a); then it got
supplied to reduceImplication, which did some zonking, and emerged with
a "needed given" (d7:Eq Int). That got everything confused.
I found a way to simplify matters significantly. Now reduceContext
- first deals with methods/literals/dictionaries
- then deals with implications
Separating things in this way not only made the bug go away, but
eliminated the need for the recently-added "needed-givens" results returned
by checkLoop. Hurrah.
It's still a swamp. But it's a bit better.