parser: Accept '()' on fields (dynamic array fields)
Merge branch 'master' into dynamic-array-fields

Conflicts:
	src/compiler/symb-struct.bas
symb: Automatically add descriptor fields for dynamic array fields
symb: Treat descriptor fields as having ctor/dtor (just like STRING fields)
ast: Initialize descriptor fields in ctors
C/LLVM backends: Don't emit fake dynamic array fields (only descriptors)
tests: Add some tests for dynamic array fields in unions/with ellipsis
symb: Re-use symbIsDynamic() instead of symbGetArrayDimensions() for now
Merge branch 'master' into dynamic-array-fields
symb: Mark descriptor fields with FB_SYMBATTRIB_DESCRIPTOR
ast: Allow passing dynamic array fields to bydesc params
ast: Automatically free dynamic array fields in destructors
Merge branch 'master' into dynamic-array-fields

Conflicts:
	src/compiler/ast-node-arg.bas
ast: Check symbIsDescriptor() instead of dtype to detect descriptor field
symb: Pass 0 length to descriptor's symbAddField(), good enough
Merge branch 'master' into dynamic-array-fields

Conflicts:
	src/compiler/ast-node-proc.bas
ast: Add base offset for descriptor field TYPEINI tree

If the descriptor is a field, then it may have a non-zero offset within
the parent UDT. And since TYPEINIs for fields use absolute offsets (based
on the parent UDT, not relative to individual fields),
astBuildArrayDescIniTree() needs to handle this now too. This is the same
as what's done by cInitializer().
symb: Re-use existing field initializer mechanism for descriptors
ast: Add missing rtlArrayErase() call for dynamic array fields with dtor
ast: Refactor hCallFieldDtor()