Use open with context manager in FileReader
Read files from their correct path on server

FileServer now tries to separate filename from its path in order to be
able to respond to requests containing only the filename.
Add support to Downloader to write files to disk
Use callbacks in Downloader for downloads

This is to prepare for the move of the downloading into its own
thread.