listen to localhost only by default

change the run.py script used for initial testing to
only listen to localhost
also make run.py pep8 compliant
correct URL in request submission template

make it an absolute URL
check if a file failing to open is actually a dir

In storage.py, add the IsDirException and trigger it
if a file we tried to open turns out to be a valid dir.
For that, open the failed path (file) as dir and check its getId().
fix getId() checking

The irods APIs getID() returns -1 (as int) when it failed,
but '<num>' (as string) when it succeeds.
Convert calls to int(getId()) where necessary.
support the Content-Length header for reading files

We now send the Content-Length header.
In case of a complete read, it's the filesize,
in case of a partial read, it's the concatenated length
of all parts that were requested (and that we're trying to push)

Also we now send a 206 status code when only parts of the file are
returned. (When parts were requested, but the whole file returned,
it's 200).

We don't have the content-range yet, because I'm not sure what to
do with multipart requests there.