Store NPY files directly in S3
Store NPY files directly in S3

Instead of storing the chunk array buffer as a binary string in S3,
rather store the string representation of the corresponding NPY file,
which is the buffer along with a (small) additional header.

This has several advantages:

- The vis trawler and other similar tools can upload NPY files straight
  into S3 (or download them the same way). This is a very efficient
  way to convert an NpyFileChunkStore to an S3ChunkStore.

- The header contains the shape and, more important, the dtype of the
  chunk. This allows us to remove the `dtype` parameter being passed
  around all over `ChunkStore` and brings it closer to the dask.array
  idea of a store (as used in the `dask.array.store` function), or
  even zarr.

- Benchmarks indicate that the new format somehow *speeds up*
  `get_chunk` by some 15% (maybe because the NPY routines do a buffered
  read from the socket).

The change is also indicated by adding '.npy' to the S3 keys.

ska-sa/katdal