Tweak grammar (1)

- Replace identical non-terminal symbols to general ones
  # `CCDeclarationBlock` to `DeclarationBlock`
  # `Declarations` to `DeclDefs`opt

- Remove `AliasThisDeclaration` so it's identical with `AliasThis`

- Rename to more general names: Postblit, Allocator, Deallocator

- Add AggregateBody, and replace other XXXBody to it

- Remove TemplateIdentifier, MixinIdentifier, and ConstraintExpression
  They are mostly redandant

- Rename `Aggregate` to `ForeachAggregate`
  Avoid confusion with `AggregateDeclaration`

- Use `TemplateParameters`

- Use `OPT` for the positions which can be empty
Tweak grammar (2)

- Tweak `AliasInitializer` grammar
  Resemble `AutoDeclaration`.

- Add `ExpInitializer`

- Merge `Lambda` into `FunctionLiteral`

- Replace `CastQual` to `TypeCtors`
  They are mostly identical.

- Add `SpecialKeyword`
Tweak grammar (3) - Bug fixes

- If `TemplateParameters` does not exist, `Constraint` must not appear.

- `StorageClass` and `Attribute` should be mostly same list
  `Attribute` should contain `pure` and `nothrow`

- Add missing `MemberFunctionAttributes`opt
  TODO: Currently (shared) static constructor cannot have postfix attributes.

- Add missing grammar for opaque class and interface

- Add Anon(Struct|Union)Declaration

- Fix `IfCondition`
Fix grammar bugs around `Declaration`

- `Declaration` should contain `(Aggregate|Enum|Import)Declaration`
  Otherwise we cannot use them in statement scope via `DeclarationStatement`.

- Move out `AliasThis` from `Declaration`
  It cannot appear in statement scope.

- `StorageClass` and `Attribute` should be mostly same list
  Add missing `LinkageAttribute` and `AlignAttribute` in `StorageClass`.
  Add missing `pure`, `nothrow` in the list of `Attribute`.
  Add missing `ref` in both `Attribute` and `StorageClass`.
fix Issue 10206 - User-defined attributes not documented well in language specification