Lower level branch dialect for targets that support block args/phi. Separate from the base
dialect because lifting back out of this is too hard for C++/WGSL. This can be used for
optimizations that require structured control flow but can also support transformations like
mem2reg or PRE that require threading SSA values in and out of the control flow ops.