inference: Fix soundness and precision issues of `MustAlias` from #63680 (#64101)
JuliaLang/julia#63680 made `⊑` strict for `MustAlias` and started to
preserve aliases in `tmerge` and `tmeet`, which caused several problems:
- `issubalias` did not compare `ssadef`, so a stale alias of an earlier
definition of a slot could be accepted at a join point and then used
to refine the reassigned slot, leading to a miscompile.
- `narrow_mustalias` and `tmeet` could wrap an already constant field
type in `MustAlias`, hiding the constant from branch folding.
- With the stricter `⊑`, constant const-prop results and call-site
refinements of slots holding an alias were discarded.
- Finally, `InterMustAlias(::InterMustAlias; ...)` defined a method of
a `Core` type on a `Core` type, which made precompilation of the
`Compiler` package fail; it is replaced with the Compiler-owned
`update_mustalias`.
Assisted-by: Claude Code (Opus 5.5)