This allows you to make some of the defs in a multiclass or foreach
conditional on an expression computed from the parameters or iteration
variables.
It was already possible to simulate an if statement using a foreach
with a dummy iteration variable and a list constructed using !if so
that it had length 0 or 1 depending on the condition, e.g.
foreach unusedIterationVar = !if(condition, [1], []<int>) in { ... }
But this syntax is nicer to read, and also more convenient because it
allows an else clause.
To avoid upheaval in the implementation, I've implemented if as pure
syntactic sugar on the foreach implementation: internally, ParseIf
actually does construct exactly the kind of foreach shown above (and
another reversed one for the else clause if present).