better handling of missing backedges (#58636)
Manage a single dictionary (keyed by TypeName) instead of scattering
this info into each TypeName scattered across the system. This makes it
much easier to scan the whole table when required and to split it up
better, so that all kwcalls and all constructors don't end up stuck into
just one table. While not enormous (or even the largest) just using the
REPL and Pkg, they are clearly larger than intended for a linear scan:
```
julia> length(Type.body.name.backedges)
1024
julia> length(typeof(Core.kwcall).name.backedges)
196
julia> length(typeof(convert).name.backedges)
1510
```