Defer the choice of array representation to further back in the backend.

This change makes arrays opaque to the compiler and lets the pretty printer
be concerned about the particular choice of array representation. As a side
effect it also simplifies code all over the place.

No functional changes.