optimize: Handle path-excluded `Core.ifelse` arguments (#50312)
It's possible for PiNodes to effectively imply statically the condition
of a Core.ifelse. For example:
```julia
23 ─ %60 = Core.ifelse(%47, false, true)::Bool
│ %61 = Core.ifelse(%47, %58, false)::Union{Missing, Bool}
25 ─ goto #27 if not %60
26 ─ %65 = π (%61, Bool)
└─── ...
```
In basic block #26, the PiNode gives us enough information to conclude
that `%47 === false` if control flow reaches that point. The previous
code incorrectly assumed that this kind of pruning would only be done
for PhiNodes.
Resolves #50276