Reorganise code structure into functional packages
refactor FileDownloader into DownloadHandler