Map a canonical denotation string to the corresponding
TypeNode static. Returns None for denotations the framework
doesn’t recognize; the solver leaves those values at
TYPE_ANY (custom types can declare their own
type_relations to seed concrete types).