rustc_mir: don't build unused unwind cleanup blocks
When building a scope exit, don't build unwind cleanup blocks unless they will actually be used by the unwind path of a drop - the unused blocks are removed by SimplifyCfg, but they can cause a significant performance slowdown before they are removed. That fixes #43511.
Also a few other small MIR cleanups & optimizations.
r? @eddyb