Enhance distarray to array conversion (implement `__array_interface__`)

In this PR I add the `__array_interface__` attribute to `DistArray` (as a property) so that one can call `numpy.array(darr)` or `numpy.asarray(darr)`.  This is mostly just syntactic sugar for `tondarray()`, but it also allows us to do things like:

```
darr # a DistArray with shape (7, 9)
arr = numpy.ones((7, 9))

arr[...] = darr
```

Closes #471.