Support assignment to slices from other grids

Allows one to assign a grid to a slice of another grid as one might do with NumPy. This action doesn't replace blocks in the assignee, rather it copies properties from the assigned blocks to the assignee blocks, modifying them in place.

Example:

```python
one_grid[:1, :2] = another_grid[-1:, -2:]
```

cc @gvwilson