Tries to follow the same basic strategy as the IR block reduction, but
producing plausibly valid MIR is a lot harder than the IR. We can't
replace block references with undef, so use a dummy empty block
inserted at the end of the function. We also have to figure out a
place to place IMPLICIT_DEFs and try to handle non-SSA liveness.
This doesn't completely handle everything necessary. It currently
doesn't really try to maintain physical register liveness, cleanup
gMIR control flow gMIR, or non-control flow block references.
This will also leave a lot of kept blocks as dead code if all blocks
between the entry and the kept block are deleted. It should probably
figure out some way to reconnect them to the CFG.