rtlib: Check LBound/UBound()'s dimension parameter to prevent crashes
LBound/UBound: no longer treat 0 dimension as if 1 was given
LBound/UBound: Evaluate at compile-time if possible
parser-decl-struct: Add common hBeginNesting()
TYPE block parser: Handle STATIC var declarations, treating as EXTERNs
DIM parser: Allow UDT as parent namespace
Field access parser: Handle static member vars
All backends: Search STRUCT namespaces for VARs and emit them
Add test cases
Update todo/changelog
DIM parser: Fix parent namespace checks

Outside-of-original-namespace DIMs corresponding to EXTERNs were only
allowed at the toplevel but not nested in another namespace.
VAR parser: Allow UDTs as parent, like DIM, for STATIC member vars
Preserve attributes when updating EXTERNs -> PUBLIC vars

This matters now that static member vars (really EXTERNs) can have PRIVATE
or PROTECTED visibility attributes in UDTs, but could also make a
difference for other attributes such as IMPORT. For an EXTERN IMPORT it's
probably better to preserve the IMPORT so that the proper code can be
generated when accessing/mangling/emitting that var.
Add visibility checks for member vars
Fix typo that caused REDIM SHARED to be treated as plain REDIM
Merge branch 'static-member-var'
Fix access to constants with CONST bits

cConstant() did not ignore CONST bits, causing any such constant to
be handled by the CASE ELSE of that SELECT block, i.e. as INTEGER
constant, which is of course wrong if it really was a CONST ULONGINT
or CONST STRING.
Fix CONST STRING constant declarations

cConstAssign() did not allow "CONST id AS CONST STRING" declarations
because it treated CONST STRING as not being a STRING.
L/Ubound(array, dim): Return dimTB's size (dim=0) or 1/0 (dim=invalid)

Also, to get this working, array descriptors for unallocated dynamic
arrays will now have their dimensions field set to 0 instead of 8
(FB_MAXARRAYDIMS), although there will still be FB_MAXARRAYDIMS entries
allocated in the dimTB. This makes sense because an unallocated array
uses 0 dimensions, no matter how many dimTB entries there are.
When DIM'ing an array, check lbounds/ubounds against the previous EXTERN