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.
I presume the `value_slices[arr.comm_rank]` is necessary because we can't scatter the slices to the targets?