Separate memory accesses from expressions.

The two types are mutually recursive. This does cause dexprs to return
though because maccesses don't include values, and dexprs need to, as
that's what they evaluate when the reads are evaluated, as part of
interleaving evaluation.
Make Opns return Errors if any of their inputs are Array values.

Also define and use an isArray predicate in more places.
Progress with "Pseudo C properties" in light of multidimensional arrays