Read a handle's entire contents strictly into a
ByteString.
This function reads chunks at a time, increasing the chunk size on
each read. The final string is then reallocated to the appropriate
size. For files > half of available memory, this may lead to memory
exhaustion. Consider using
readFile in this case.
The Handle is closed once the contents have been read, or if an
exception is thrown.