Merge pull request #2496 from 9rnsr/fix10866

Issue 10866 - Regression (2.064 git-head) Massive compiler slowdown
fix Issue 8825 - Wrong line number of error message

- Each tokens should have its own 'loc'.
- Rename `Lexer::loc` to `scanloc` to avoid misuse of lookahead-loc.
Fix trivial wrong line number of aggregates
Fix iasm parser bug

`asm_chktok` will advance the token place. So reading `asmtok->uns64value` after the call would take a wrong value.
fix trivial code logic bug
[Rafactoring] Parser::skipParens
[Refactoring] parsing template arguments
[Refactoring] Change case fallthrough to explicit labeled goto
Support one-or-more elements TupleExp and Initializer (parser might be incomplete)
Support TypeTuple and declaration
Disallow {} on BasicType

- Move {} from BasicType to Type
- Always check BasicType on function parameter types [grammar fix]
Add DeconsDeclaration and Ptn
Parse DeconstructDeclaration

Note that, tuple/array pattern accepts empty elements.
Allow decompose of alias this tuple
Improve runnable test
Add fail_compilation test
Consider parsing cost (incomplete)
[OT] Allow basic types as PrimaryExp, and try to parse T* as TypeExp

For `foreach (T; {int, int*, T*}) { ... }`
Define isTuple and parseTuple
Switch to isTuple, and remove isTupleExp