Stop using LIST nodes for PHI operand lists (dotnet/coreclr#20266)
* Stop using LIST nodes for PHI operand lists
* Speed up PHI creation
Calling gtSetStmtInfo/fgSetStmtSeq every time an arg is added is rather expensive and not really needed. Costs are always 0 and the shape of the PHI tree is always the same.
Removal of GT_LIST nodes makes it easier to update the linear order incrementally when a GT_PHI_ARG node is added.
* Cleanup PHI value numbering
This replaces the manual traversal of PHI's list of uses with a range-based for loop and cleans up a bunch of convoluted code.
* Remove redundant AsPhi
* Remove list pointer union
* Update PHI equality check
* Add GenTreePhi comment
* Rename op to node
Commit migrated from https://github.com/dotnet/coreclr/commit/
501c1e3629bbe89cbcec2ee8057ec111a88bdbc8