This goes atop !764. The last three commits belong to this MR.
Since we want to get rid of loops and `break's as much as possible, we try to move `break's out of selection constructs as much as possible so it's easier to match them with loops. This MR introduces a few other tricks to help that.
-- v2: vkd3d-shader/ir: Move breaks out of selections again after having optimized loops. vkd3d-shader/ir: Append code to the non-breaking branch if there is breaking one. vkd3d-shader/ir: Prepare for changing the destination list in vsir_cfg_optimize_recurse(). vkd3d-shader/ir: Remove loops that terminate with a `break'. vkd3d-shader/ir: Count how many jumps target each loop.