Add `__setitem__` slicing

Building on #384 and #385, this PR allows slice syntax in a `DistArray`'s `__setitem__`.

The same restrictions apply:  `BlockMap`s and `NoDistMap`s only and slice-steps of size 1 only.
This block could use some refactoring -- what about adding relevant polymorphic stuff to the client-side map classes and to the client-side `Distribution` to help with this?