Nocopy array save on arbitrary file objects

This PRs add more tests for the `numpy.save(z) / load` roundtrips and leverage the `memoryview` / `buffer` protocol to avoid a memory copy when saving the content of a contiguous numpy array to an arbitrary file object (using the `write` method).

This is especially useful for saving the bytes of a numpy array into a compressing file object such as a `GzipFile` instance for example.