fix Issue 8913 - Wrong code in IfStatement condition Expression

Type cast from `e : T[n]` to `T*` should generate `&e[0]`, not `&e`.
fix Issue 9174 - regression(2.057) ice(cast.c) with ternary operator and alias this

Precedence 'alias this' resolving than integral promotion.
Fixes Issue 9368 - Final switch on typedef'ed enum is not properly checked
Fixes Issue 8717 - Private and Protected should be accessible from within
same module.
more type refactoring
Merge pull request #1565 from WalterBright/b37

more type refactoring
move slist to back end
Merge pull request #1566 from WalterBright/b38

move slist to back end
refactor type_function
Merge pull request #1567 from WalterBright/b39

refactor type_function
refactor type_enum
remove redundant slist_add()
fix Issue 9410 - Wrong selection for function overload
Merge pull request #1534 from AndrejMitrovic/Fix9368

Issue 9368 - Final switch on typedef'ed enum is not properly checked
Merge pull request #1568 from WalterBright/b40

refactor type_enum
refactor type_struct_class
Merge pull request #1571 from 9rnsr/fix9410

[Regression 2.061] Issue 9410 - Wrong selection for function overload
Merge pull request #1533 from 9rnsr/fix9126

Issue 9174 - regression(2.057) ice(cast.c) with ternary operator and alias this
Merge pull request #1573 from WalterBright/b41

refactor type_struct_class
some more dt simplification