This is a fresh attempt to port ArgumentPromotion to the new pass manager. The
key difference is that we now handle the deletion of reference edges when
promoting calls. This requires re-scanning the callers to compute the set of
*removed* references which turns this whole thing quadratic.
I'm not sure we want to go this route long term, and not even sure if this will
be an acceptable short-term direction, but sending out the work in progress to
aid discussions and experiments with others.
Note that this will crash if we end up deleting an edge in a way that
decomposes a RefSCC into multiple new RefSCCs. Code for that hasn't been added.