cVariableDecl(): Check whether a declaration/code is allowed in the context

SELECT disallows everything until the first CASE via
FB_CMPSTMT_MASK_NOTHING, but that's worth nothing if the other parsers
don't always check cCompStmtIsAllowed()...
Improve error message for code between SELECT and CASE
lang QB: Allow DEF___ inside procs/compounds (083f1d68 revisited)
parser: Improve error recovery if cCompStmtIsAllowed() = FALSE
parser: Improve error recovery for END <compound> statements
parser: Add missing error report for "CONST [id] AS"
parser: Improve error message for "CONST <non-alphanumeric-token>"

By moving the hCheckSuffix() check behind the checks for
FB_TKCLASS_IDENTIFIER etc., things like "CONST 123" or "CONST :" will now
trigger an "expected identifier" error, instead of "suffixes are only
valid in -lang qb...".
parser: Improve error recovery for "..." ellipsis as array lbound
parser: Treat EOF as statement "separator"

This fixes an issue with ASM appearing at EOF without newline following,
and also improves the error messages in some other cases checking the
cStmtSeparator() result. The loop in cEnumBody() had to be adjusted to
avoid an infinite loop.
parser: Remove unnecessary return values of various statement parsers

Anything that handles a statement (by parsing it or by reporting an error
and doing error recovery) doesn't need to return TRUE/FALSE to
cDeclaration() or cCompoundStmt(). If the statement was parsed, we're at
EOL, and cStatement() cannot continue trying anything else anyways.
The FALSE result in these cases is only needed if a parsing function did
not handle a certain construct, and wants to let another parsing function
handle it.