add file read function from irods

reads whole files and streams the content directly to
the client. does not support range requests yet.
remove conn from storage.py function signatures

this is better handled inside the storage implementation.
support multirange requests in the storage.py backend

for implementation details please see the code comments
support multi-range requests

Support the Byte-Range header in HTTP.
support data uploads using PUT

Gets the request data and streams it into iRODS.
The streamwrapper shuold avoid that flask/werkzeug buffers
the whole request data in memory, but I haven't tried to
prove whether this actually works yet.