JIT: Allow sharing call temps within statements (#79574)
fgMakeOutgoingArgCopy has a hashset of shared temps that it uses before
creating a new temp. However, this hash set is reset only at new
statements which can cause regressions when forward sub moves several
calls into the same statement.
This adds support to allow the temps to be shared also within the same
statement. To do this we must take care not to share temps that have
overlapping lifetimes.
Also remove the FOREACH_HBV_BIT_SET macro in favor of a callback-based
function. The macro expands to 4 nested loops, so "break;" in it would not
do what is expected, and we had a bug due to that. The callback-based
iteration is harder to misuse. I initially tried creating an iterator for it, but
that was much more complicated.