SELECT CONST: Allow range checking on 64-bit expressions in 32-bit programs.
Add some tests covering various integer type expressions.
SELECT CONST: Optimise range test for case value

Based on the optimisation (where U >= L):
(a >= L) and (a <= U)  -->  (cunsg(a - L)) <= cunsg(U - L))

Except we are optimising the opposite test:
(a < L) or (a > U)  -->  not (a >= L and a <= U)  -->  (cunsg(a - L)) > cunsg(U - L))
ast: Fix macro param vs. ASTNODE field name conflict in astInitNode()

This was not a problem because so far the only user of astInitNode() passes
"dtype" and "subtype" variables to the corresponding macro parameters,
which happen to match the ASTNODE field names, thus didn't cause an error.
ast: Fix dangling pointer in astTypeIniUpdate()

astTypeIniUpdate() calls hWalk() to search for TYPEINIs in the
given tree. hWalk() does astTypeIniFlush(), deletes the TYPEINIs,
and returns the temp var initialization code (that sets up a
temp var with the data from the TYPEINI). hWalk() also updates
the original tree to do a VAR access on the new temp var, in
place of the TYPEINI.

This prevented the dangling pointer in most cases, but it failed
to handle the case when the TYPEINI is the root of the tree, and
thus has no parent that could be updated. In that case hWalk()
just deleted the TYPEINI, leaving the "tree" variable in
astTypeIniUpdate() being a dangling pointer.

To fix this, I adjusted astTypeIniUpdate() to always wrap the
tree in a fake, temporary parent node, so hWalk() always has
something to update. This way it doesn't need to worry about
having to handle any special cases.