Apply cycle-breaker idea to Wanteds
This fixes #19682 (closed).
As you'll see in the changed comments, I wondered about the possibility of this scenario happening in a wanted (or, more accurately, a Derived), but we didn't have a concrete example, until #19682 (closed).
It's a bit fiddly in parts, but it does the trick. The details are all in Note [Type variable cycles] in GHC.Tc.Solver.Canonical.
I will squash and write a better commit message once tests pass.