inference: track reaching defs for slots (#55601)
This PR implements the "Path-Convergence Criterion" for SSA / ϕ-nodes as
part of type-inference.
The `VarState.ssadef` field corresponds to the "reaching definition" of
the slot in SSA form, which allows us to conveniently reason about the
identity of a `slot` across multiple program points. If the reaching def
is equal at two program points, then the slot contents are guaranteed to
be egal (i.e. `x₀ === x₁`)
Fixes #55548 (alternative to
https://github.com/JuliaLang/julia/pull/55551), by having `Conditional`
remember the reaching definition that it narrows.