Cartesian: parse-time evaluation of A[3] when A is known

This allows efficient operations like this:

    indexes = [:i_2, :i_3]
    macroexpand(:(@nexprs 2 d->$indexes[d]))

This also centralizes the parse-time evaluation of expressions,
combining the new array reference with the previous arithmetic
and conditional evaluation, so that it can be done on a single
pass through the expression tree.