DistArrayProxy indexing

Add simple DistArrayProxy indexing.

More specifically, add a `__getitem__` and `__setitem__` to `DistArrayProxy`.

These are implemented in the style of previous `DistArrayProxy` functionality in that everything is deferred to underlying `DistArray`s.  In this version, all engines are queried for an index, and the ones that don't have it return `None`.

It's slow, but it works for any distribution type that has a Map (currently block or cyclic).  Slices also work, though they pull all the data back to the client (not create a View as @kwmsmith wants).  Iteration also works (which required hacking the CompositeError returned when you run off the end).