Reference types are non-POD
[Refactoring] Use semanticRun for aggregates

Reasons:
1. Currently used states have problems:
  - `members` and `symtab` would be NULL for opaque declaration
  - `sizeok` is not set for InterfaceDeclaration
2. We should catch the "the first called semantic" timing for some reasons
[Refactoring] Consolidate forward reference handling between aggregates

- Find valid `scope` first
- Set parent before `type` semantic and its mangling calculation
- `parent` and `type` are necessary even for opaque declaration
[Refactoring] Consolidate handling of protection, storage_class, and userAttributes

They should be applied even for opaque declaration
[Refactorign] Consolidate `symtab`
[Refactoring] Fix ungagSpeculative() position
fix Issue 12555 - Incorrect error ungagging for speculatively instantiated class

`ungagSpeculative()` should do nothing for function local symbols.
Supply scope for addMember call
[Refactoring] AttribDeclaration::createNewScope
[Refactoring] AttribDeclaration::newScope
Generalize addMember and importAll for derived class of AttribDeclaration
Generalize semantic2 and semantic 3
Always delay static-if condition evaluation
fix Issue 12619 - Invalid warning for unused return value of debug memcpy
fix Issue 12649 - "discards return value" warning will cause ICE on function pointer call
More better fix for issue 5498

The root issue is in typeMerge function.
[Refactoring] Improve error propagation in arrayExpressionToCommonType
[Refactoring] Prevent storing ErrorExp in exps
fix Issue 8309 - ICE in typeMerge on 'void main(){auto x = [()=>1.0, ()=>1];}'
Fix Issue 8101 - Fixup pull improving diagnostics when there are overloads.