This revision adds support for unstructured control flow to the bufferization infrastructure. In particular: regions with multiple blocks, cf.br, cf.cond_br.
Two helper templates are added to BufferizableOpInterface.h, which can be implemented by ops that supported unstructured control flow in their regions (e.g., func.func) and ops that branch to another block (e.g., cf.br).
A block signature is always bufferized together with the op that owns the block.
Depends On: D158154
Should there be some max number of revisits such that the compiler does not run into an infinite loop?