ExpandListArguments: Optimize the parser

Optimize cmSystemTools::ExpandListArguments so as not to build a string
character-by-character. This avoids excess reallocations of the result
string.
cmGeneratorExpressionLexer: Use a switch statement to parse

Optimize cmGeneratorExpressionLexer::Tokenize to use a switch statement.
The many dereferences of the input pointer were expensive. Also remove
excess pointer arithmetic.
cmGeneratorExpression: Improve parsing in StripEmptyListElements

The char-by-char parsing causes lots of reallocations which shouldn't be
necessary. To improve this, fast-path strings without a semicolon,
reserve space in the result, and insert into the result in chunks.
relnotes: Add release notes for the branch
Merge topic 'dev/faster-parsers' into next

dd777124 relnotes: Add release notes for the branch
c5f4fb5f cmGeneratorExpression: Improve parsing in StripEmptyListElements
2563c484 cmGeneratorExpressionLexer: Use a switch statement to parse
52fc5d48 ExpandListArguments: Optimize the parser