Implement Statement::toIR in terms of a visitor interface
[Refactoring] Improve `Type::addSTC`
[Refactoring] Improve `Parser::parseType` by using `Type::addSTC`
[Refactoring] Improve CastExp parsing by using `Type::addSTC`
fix Issue 11768 - inconsistent behavior of type qualifier inout + const

Fix up `Parser::parseBasicType` by using `Type::addSTC`
[style] fix indent
[style] Just sort out cases

0 -> const -> wild -> shared -> ... -> immutable
[bugfix] Fix type parameter deduction bug

- `inout(U)` should accept `shared(inout(T))`
- `shared(inout(U))` should accept `shared(const(T))`
Clean up inout deduction

- Rename `Type::wildConvTo` to `deduceWild`
- Use `wildmatch` for sum of arguments match level, and use `wm` for one parameter match level.
- Extract current workarounds for issue 6930
fix Issue 6930 - combined type of immutable(T) and inout(T) should be inout(const(T))
Remove unnecessary class BoolExp
Merge pull request #2998 from yebblies/boolexp

Remove unnecessary class BoolExp
Remove dead function isBit
Merge pull request #2997 from yebblies/removebit

Remove dead function isBit
Merge pull request #2992 from 9rnsr/fix6930

[enh] Issue 6930 - combined type of immutable(T) and inout(T) should be inout(const(T))
Remove dead TOKtobool and Bool
Merge pull request #2999 from yebblies/TOKtobool

Remove dead TOKtobool and Bool
Merge pull request #2754 from yebblies/s2irvisitor

Implement Statement::toIR in terms of a visitor interface
fix Issue 11755 - Operator <>= and !<>= with arrays make internal error in e2ir

Currently backend layer implicitly translates NCEG operators to the corresponding integer operators in non-floating comparisons. If no corresponding operator exists, it had been reported backend error, and now ICE causes.
Merge pull request #3000 from 9rnsr/fix11755

[REG2.065a] Issue 11755 - Operator <>= and !<>= with arrays make internal error in e2ir