Streaming numpy.save to arbitrary file objects 

Use `numpy.nditer` to stream the byte content of an array to the `write` method of a custom file object using buffered chunks so as to avoid a full array memory copy.

This is a more stable replacement for #4075 that tried to use a `memoryview` instance to remove the memory copy (but only for the contiguous case).