Decompose Decl into FuncDeclaration and VarDeclarations

FuncDeclarator is a dup of Declarator, and FuncDeclaratorSuffix is a dup of DeclaratorSuffix

And we need to keep function type aliasing with the old style syntax.
fix Issue 12579 - DMD rejects valid function literal

Remove FuncDeclaratorSuffixes to disallow zero, two or more parameter lists

And disallow mixing C-style suffix in function declaration, as follows:

  void foo[](int a);
fix Issue 10235 - Grammar does not contain a rule for function declarations

Move FuncDeclaration and related non terminal symbols into function.dd

Conflicts:
	declaration.dd
	grammar.dd
fix Issue 13523 - Auto function declaration does not match any grammar rule
Reorder non terminal symbols in declaration.dd
fix hyperlink to contracts.html
Merge pull request #660 from 9rnsr/fix_function

Fix grammar around function declaration
C-array warnings
volatile becomes error
Merge pull request #650 from WalterBright/noVolatile

volatile becomes error
Merge pull request #662 from WalterBright/deprecate-c-array

C-array warnings
make typedef an error
Merge pull request #663 from WalterBright/typedef-error

make typedef an error