vkd3d-shader/ir: Try harder to move `break's to the end of loops.
This goes atop !764 (merged). 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.
Edited by Giovanni Mascellani