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