AST: Don't canonicalize GenericFunctionTypes in TypeBase::getASTContext()
A TypeBase stores either an ASTContext if its canonical, or its canonical
type if it is not.
getASTContext() will then canonicalize the type if its not canonical.
While this is very clever, in the case of a GenericFunctionType, it
triggers the rather expensive creation of a GenericSignatureBuilder.
Avoid this by special-casing GenericFunctionType here and getting the
ASTContext from a structural sub-component that is known to exist
instead.