RF: refactor mmap logic in array_from_file

Use test for compressed files; drop attempt to save memory from strings
until I understand better.
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.
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`.
NF: add back using file bytes memory

Use heuristic to guess whether we can re-use memory from file bytes read
for array memory store.