fix some portability issues with file handling

Explanation for later reference of why the commits are necessary and what it does:

On different OSes and Perl configurations, caller will return relative or absolute paths, which will be stored as the caller for the App. The first commit forces that path to always be relative, fixing the very last test of app.t on windows.

As for the second commit:

The old code in Handler::File has no concept of volumes at all and discards that information. The new code is aware of them and tries to merge pub_dir and request path as sanely as it can.