A "structural" type conversion is one where the underlying ops are
completely agnostic to the actual types involved, and simply need to
update their types accordingly.
An example of this is scf.if -- the values yielded by the regions merely
need to match the result types. The scf.if op itself just needs to
update its types accordingly with how the body is modified.
See the comment in TestBufferizeStructuralOps.cpp for more details on
the issues with the current formulation here. Any help on resolving
those issues would be greatly appreciated.