Support copying subsets of permutation arrays to devices
Previously, ArrayHandlePermutation moved data to devices (for the execution environment) by copying the entire source arrays and using a special array portal in the execution environment to extract from the appropriate location on the fly.
That is still the default behavior, but now there is an alternate mode where instead of preparing the source array for the execution environment, it uses the ArrayManagerExecution to copy the subset of data exposed in the permutation to the execution environment. It implements this by disabling the specialized ArrayTransfer and using the default one.