[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 package defined for package protection attribute. Adjusting
acess checks to use it will be done in separate commit.
Fix #2529: package protection + sub-package

Fix relevant issue by allowing to explicitly define
package to bind protection attribute to. Defaults
remain unchanged.
Reject non-parent protection packages

Using non-existent or non-parent package as an argument to
'package' protection attribute will result in compile-time error.

Test cases with error message output added.
Improve ProtDeclaration error formatting.

Now includes actual protection attribute kind and package name (if any)
    into error message. Also stores location information from the parser.
Do not generate code for protection tests
Printing of ProtDeclaration is handled by visitor
Move isAncestorPackageOf docs to definition
Simplify isAncestorPackageOf implementations
Trivial whitespace fix
Move package resolution to semantic phase
Fix debug printfs in access.c
Consume remaining line tokens on error
fix Issue 11312 - Avoid auto-dereference for UFCS functions
fix Issue 13353 - [ICE] assertion with is() and templated interface
Merge pull request #3900 from 9rnsr/fix11312

Issue 11312 - Avoid auto-dereference for UFCS functions
Merge pull request #3901 from 9rnsr/fix13353

[REG2.066] Issue 13353 - [ICE] assertion with is() and templated interface
fix Issue 13311 - ICE, CtorDeclaration::semantic(Scope*): Assertion `tf && tf->ty == Tfunction' failed
Merge pull request #3651 from Dicebot/package-protection

Fix #2529: explicit protection package
Merge pull request #3902 from 9rnsr/fix13311

[REG2.065] Issue 13311 - ICE, CtorDeclaration::semantic(Scope*): Assertion `tf && tf->ty == Tfunction' failed