Getting to the point: index sets and parallelism-preserving autodiff for pointful array programming