Add support for trailing commas in more places

This lets the parser understand trailing commas in method calls, method definitions, enum variants, and type parameters.

Closes #14240.
Closes #15887.
Yes, but then I’d need to duplicate the condition in the `while` loop that asserts that the following token is a `>`, `>>`, `>=`, or `>>=`, right? Because for something like `let x: Foo<int = 1;`, it’d see that the `=` isn’t a comma, so it’d bail out, but it'd need to check that the `=` is one of the aforementioned `>`-like tokens. That would mean I’d need to duplicate the condition, which I didn’t want to do.

I went with the other solution because it seemed a lot simpler in my head (‘just parse a type, then a comma, then a type, then a comma, and repeat until you find a `>`-like token or it’s not what you expect’). The code did turn out a bit cryptic, though.