Implement an FTP downloader, which basically works

This resolves #974.

I'm not sure how the `status_code` for errors are assigned so I've left them as `TODO`s.