Allow evaluateConstantExpression to return non-literal constant expressions

Literals for types other than the basic ones and certain values for double (NaN, infinity)
are represented via function calls to "magic" constructors. Currently, queries such as these
don't work:

VALUES (now())

VALUES (0.0/0.0)
Fix planning issue with date/time constructs in VALUES

Planning VALUES requires optimizing and constant-folding expressions.
The interpreter/optimizer can only deal with a subset of AST node types
(e.g., CurrentTime is not supported).

To work around this until the new expression tree is implemented, canonicalize
expressions before feeding them to the optimizer/interpreter.