Currently CombineTo will only delete the replaced node but not any of
its operands which allows some simplification in concurrent node
replacement, but may allow unused nodes from persisting which may
prevent optimizations that apply only when single uses are around. It
also permits CombineTo patterns which may trigger assertions due to
CSE elimination. This change prunes nodes more aggressively fixing hte
unused nodes issue and increasing the likelihood that assertions
trigger when CombineTo is incorrectly applied.
Fixes for minor changes are included in this patch. A thorough check
of cases should be run to shake out additional cases.
This should likely be done to the ReplaceAllUsesWith procedures as well.