Fix #705: Make REDIM respect STATICLOCALS

If a procedure is marked with the STATIC keyword, all variables
declared in it should be made STATIC automatically, such that
they're allocated on the heap and are preserved for later calls.

For REDIM, this was ignored, presumably because STATIC storage
was confused with static (fixed size) arrays as opposed to
dynamic (variable size) arrays. But it's ok to have STATIC arrays
no matter whether they're fixed size or dynamic, just like with
SHAREDs or locals.

QB also creates STATIC dynamic arrays if REDIM is used to create
a dynamic array inside a procedure with STATIC, so that's another
reason why FB should behave like this too.
astDumpTree(): Show DECL's symbol, if any
cVarDecl(): Eliminate unnecessary check

This code is already in the ELSE branch of an
	 if( lexGetToken( ) = CHAR_RPRNT ) then
check, so no need to check again.
Allow STATIC declarations to use non-constant array subscripts
cVarDecl(): Generate fb_ArrayRedimEx() CALL behind DECL node

because for the C backend, it's important that variables are declared
before they're used.

This problem apparently could only show up with STATIC dynamic arrays
where the dimensions were known at the point of declaration. STATIC dynamic
arrays weren't allowed anyways though before the previous commits.

The problem with the cVarDecl() code is that it uses a var_decl
variable and astNewLINK()'s to link stuff (DECL, initializer)
together, and it's only sometimes doing astAdd() to "flush" it.
However rtlArrayRedim() always does astAdd(), and it's called
between the DECL and initializer parts, so in some cases it ended
up before both due to the delayed astAdd() for DECL/initializer.

Now it's moved behind the initializer part, which should be ok
because DECL/initializer are always flushed at that point, and the
rtlArrayRedim() isn't needed before the initializer because dynamic
arrays aren't allowed to be initialized anyways.
cVarDecl(): Remove is_dynamic, check attrib instead
Clean up rtlErrorCheck(), shouldn't ever fail
rtlGosubReturn(): Use bool result (cleaner)
REDIM STATIC arrays only once at declaration point, not during every call

Array declarations that declare a dynamic array but with known dimensions
normally REDIM the array implicitly to apply the initial bounds to the
dynamic array.

The same is also done for the now allowed STATIC dynamic arrays declared
with known dimensions, but it should only be done once when the STATIC
declaration is reached for the 1st time, not every time. This is the same
as for STATIC variables which also are initialized only the 1st time their
declaration is reached, but not every time.

To implement this, I adjusted cVarDecl() to wrap the fb_ArrayRedim() call
in the same kind of STATIC flag check as done for STATIC variable
initialization. In fact I adjusted that code to allow to be re-used for
the REDIM too.

That required rtlArrayRedim() and thus also rtlErrorCheck() to be adjusted
to return their AST instead of astAdd() them, so that it can be LINKed
as needed in cVarDecl().
Don't ignore OPTION DYNAMIC for STATIC declarations

See also bedd04cd. STATIC doesn't mean it's a fixed-size array, it just
means the array (or the descriptor, if dynamic) is allocated on the heap
instead of the stack.
tests: Add a REDIM STATIC test for -lang qb