BF: add check for bz2 file having fileno

bz2 file does not have fileno in Python 3.2 and 2.7 on travis at least.
NF: test for file-like containing compressed data

Test for gzip / bz2 file object, so we can in due course avoid
memory-mapping these guys in ``array_from_file``.
TST: can we change strings from files?

If we can change strings loaded from files without messing up the result
of a subsequent load, then we can use the string memory as modifiable
memory backing the array returned from `array_from_file`.
TST: add tests for array reread

Check that reading an array, modifying the array, then rereading the
array, returns the same result for both reads.
RF: refactor mmap logic in array_from_file

Use test for compressed files so we don't mmap them.  Numpy was trying
to mmap bz2 files.

Following suggestion from Nathaniel, use `readinto` method of most
file-like objects to read data into given memory location, so we can be
sure that memory location is not used by some other object.

If we can't use `readinto`, use heuristic to guess whether we can re-use
memory from file bytes read for array memory store.

Use bytearray to read data into, to avoid complications with numpy
array.data buffers and Python 3 / "non-native" datatypes.