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.
What about doing a `for` loop of `self.apply()` calls, each iteration sending the slice to its target?