Determine whether switch edges are feasible based on range information, and remove non-feasible edges lateron.
This does not try to determine whether the default edge is dead, as we'd have to determine that the range is fully covered by the cases for that.
Another limitation here is that we don't remove dead cases that have the same successor as a live case. I'm not handling this because I wanted to keep the edge removal based on feasible edges only, rather than inspecting ranges again there -- this does not seem like a particularly useful case to handle.
Do we have to exclude constant ranges that may be undef here? Should all successors be feasible in that case?