fix Issue 13200 - Assertion `protName' failed

Set `parent`, `protection`, `isdeprecated`, and `userAttribDecl` members of `EnumDeclaration` as same as class and struct declarations, even if its definition is opaque.
fix Issue 13788 - dmd segfault, pragma(mangle) and a mixin
Unlisted bug fix: correct sc->pop() timing
[Refactoring] Improve code flow for error handling
[Refactoring] Remove ScopeStatement that is hard to notice

Conflicts:
	src/expression.c
[Refactoring] Increase locality of variables
fix Issue 13787 - Error without line number when slicing function pointer
[Refactoring] Fix incorrect wording 'arg' 'argument' for Parameter objects

An exception is the around of TypeTuple. It stores types and expressions
merely using Parameter. So the wording 'arg' is not incorrect at least.
Merge pull request #4182 from 9rnsr/refactor_parameter

[Refactoring] Fix incorrect wording 'arg' 'argument' for Parameter objects
Merge pull request #4181 from 9rnsr/fix13787

Issue 13787 - Error without line number when slicing function pointer
Merge pull request #4180 from 9rnsr/fix13788

Issue 13788 - dmd segfault, pragma(mangle) and a mixin
Merge pull request #4179 from 9rnsr/fix13200

Issue 13200 - Assertion `protName' failed
fix Issue 13783 - Function overload with rvalue `inout` parameter not selected when `enum` parameter implicitly converted to its base type

The root issue is a flaw in the overload resolution mechanism.
For the function `auto f(ref T);`, an lvalue of `enum E : T` should not match.