Clean up useless symbIsExtern() checks (EXTERNs can't be initialized)

and EXTERNs that are allocated in a module and possibly initialized at
that point lose the EXTERN attribute.
ASM backend: Simplify check symbGetIsJumpTb() check

astBuildJMPTB() currently always marks the jumptb as initialized, so the
ASM backend doesn't need to bother checking for that. Conceptually this
makes more sense anyways: we don't want to emit the fake jumptb vars, no
matter whether "initialized" or not.
ast: Don't declare ASM backend's jump tables as array

This prevents an array descriptor from being added for the jump table.

The code in symbAddArrayDesc() which was supposed to prevent the
descriptor from being added didn't work because it checked
symbGetIsJumpTb() on the array, but astBuildJMPTB() only adds this flag
after the symbAddVar() which triggers the symbAddArrayDesc().

(However, it was never emitted, because it was never accessed, so there's
no change in code generation)
ast: Don't mark ASM backend's jump tables as INITIALIZED

They don't have any initree. And anyways, none of the existing
symbGetIsInitialized() checks will ever get to see a jump table.
symb: Remove FB_SYMBSTATS_INITIALIZED; check symbGetTypeIniTree() instead
symb: Pass 0 length to descriptor's symbAddField(), good enough
parser: Solve out unnecessary variable in cVarDecl()
parser: Fix AST node leak in cVarDecl()

The code block above the "if( token <> FB_TK_EXTERN ) then" block builds
up a var_decl tree, but since it's only used in the
"if( token <> FB_TK_EXTERN ) then" block, the var_decl expression was
leaked in case token = FB_TK_EXTERN.
ast: Split astLoadStaticInitializer() out of astTypeIniFlush()
ir: Add common irhlFlushStaticInitializer() for use by all backends
Remove old assert/TODO from astTypeIniFlush()

Since f233faf2af02d2cfbc68c6be28aa6ad2003bb5b0, astTypeIniFlush() won't
be called on variables with the INITIALIZED flag but no initree during
error recovery anymore.
ast: Simplify astBuildInstPtr()'s 3rd parameter
ast: Re-use astBuildInstPtrAtOffset() to implement astBuildInstPtr()
ast: Combine astBuildInstPtr & astBuildVarField functions
Simplify by using astBuildVarFieldAtOffset()
ast: Fix AST node leak in astNewASSIGN()
ast: Make astDumpTree() show expression dtypes by default

I'm always looking for the dtypes on ASTNODEs, so I always end up enabling
it manually. It seems like it'll be very useful to have it enabled by
default.
ast: Allow astTypeIniFlush() against expressions, not just symbols

This fixes a FIXME in astNewASSIGN().

Besides astTypeIniFlush() itself, also cInitializer() and the
astTypeIniAdd*() functions had to be adjusted to preserve the proper dtype,
which allowed the AST_INIOPT_DODEREF/FB_INIOPT_DODEREF hack used by NEW
operator handling to be removed.
cInitializer(): Don't build TYPEINI_SCOPEINI without corresponding SCOPEEND

This one code path could build a TYPEINI tree with a SCOPEINI, then an
ASSIGN to the UDT (not a field), and then no SCOPEEND.

A SCOPEINI without SCOPEEND would break the C/LLVM backends. But this never
caused any problems because this code path only covers UDT initializers
where the UDT doesn't have a constructor, which are currently only
allowed for local variables, and those will be flushed with
astTypeIniFlush() instead of astLoadStaticInitializer(), and that doesn't
use SCOPEINI/SCOPEEND at all. It's only astLoadStaticInitializer() that
uses them for the C/LLVM backends.

As it turns out, it makes most sense to not build a TYPEINI scope at all
on this code path. But since it's unknown at the beginning whether a scope
will be needed or not, the SCOPEINI must always be added, and then removed
again if it's not needed.
ast: Only use typeDump() in debug build