Add non-allocating version of ptr array ref
This splits out accessing an array of pointers as a special
case, because accessing such an array does not allocate and
additionally provides a root for the returned value. Splitting
that case allows the static analyzer to understand these
constraints.