Synchronize ClsInst.doTyConApp with TcTypeable validity checks (#15862)
Issue #15862 (closed) demonstrated examples of type constructors on which
TcTypeable.tyConIsTypeable would return False, but the Typeable
constraint solver in ClsInst (in particular, doTyConApp) would
try to generate Typeable evidence for anyway, resulting in
disaster. This incongruity was caused by the fact that doTyConApp
was using a weaker validity check than tyConIsTypeable to determine
if a type constructor warrants Typeable evidence or not. The
solution, perhaps unsurprisingly, is to use tyConIsTypeable in
doTyConApp instead.
To avoid import cycles between ClsInst and TcTypeable, I factored
out tyConIsTypeable into its own module, TcTypeableValidity.
Fixes #15862 (closed).