Fix distributed IO tests when using a remote cluster

In these changes, in `test_distributed_io.py`, I

1. remove the assumption that the client shares a filesystem with the engines (I still assume all the engines share a filesystem),
2. make liberal use of the new `Context.apply` function, and
3. speed up the tests by using `fromarray` and `{setUp,tearDown}Class` where possible.