ast: Add astRemoveNoConvCAST() helper
ast: Add astSkipNoConvCAST() helper
Allow byref function pointer call results to be ignored
ast: Make astDumpTree() show FIELD's symbol
ast: Refactor astIsClassOnTree() into astHasSideFx()
Treat PTRCHK/BOUNDCHK as not having side-effects

This makes astHasSideFx() return FALSE for the RTL function CALLs in
PTRCHK/BOUNDCHK (-exx) nodes. Previously, the CALLs included in the
PTRCHK/BOUNDCHK nodes would be seen as side-effect.

An alternative solution may be to not store the CALLs to the RTL functions
in the PTRCHK/BOUNDCHK nodes in the first place, but instead build them
during emitting (in astLoadPTRCHK/BOUNDCHK). That would require storing
the lbound/ubound expressions and line number information in the
PTRCHK/BOUNDCHK nodes though.

In most places in the compiler this would only cause side-effect removal,
which just resulted in less optimal code generation but wasn't a problem
visible to the user.

However, there is 1 place where this makes a visible difference: The
fb.image expression parsing/checking in parser-quirk-gfx.bas,
hCheckFbImageExpr().

For the GET graphics statement, if a udt.array(i) target image expression
is given, it has to clone the array access, because it's passed twice to
fb_GfxGet(): once as target buffer, once for manual bound checking.

This cloning isn't done if the expression contains side-effects though,
because that wouldn't be safe. Instead, an error is shown.

In this one case the use of -exx would cause BOUNDCHK to be added which
caused code to stop compiling because it suddenly seemed to contain
side-effects.

This also prevented the FB test suite from compiling under -exx since the
addition of the fb.image expression parsing tests in 298b2ee16a.