fix Issue 5635 - Code inside 'foreach' using opApply cannot modify variable out of its scope in a template function.
fix Issue 6430 - Overloaded auto-return functions each with a nested aggregate of the same name are conflated
fix Issue 8100 - [ICE] with templated subclassing
fix Issue 8392 - DMD sometime fail when using a non static function template within a function template
fix Issue 8499 - ICE on undefined identifier
fix Issue 9708 - inout breaks zero parameter IFTI
fix Issue 12362 - dmd hangs when attempting to use undefined enum
fix Issue 12825 - Invalid "duplicated union initialization" error with initialized field in extern(C++) class
[refactoring] move protection to Dsymbol

Protection attributes are applicable for most D symbols, defining
it in descendants results in code duplication. Better to keep it in
base by default and process exceptions.
[refactoring] turn PROT into struct and rename it

Makes it possible to easily add additional protection
information and differentiates between protected imports
and actual attribute.
Support 'package(ident)' syntax (parser/AST)

This commit adds capability of parsing and resolving
explicit packagedefined for package protection attribute. Adjusting
acess checks to use it will be done in separate commit.