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.