Refactor the download logic

Prelude to using it elsewhere
Copied most of the download methods into a new fileutils module

Also added unit tests
Use fileutils in artifacts
Update test_artifacts

Also some flake8 fixes
Travis flake8 has been upgraded again.
Added support for HTTPAuthentication in fileutils
open_url takes HTTP auth arguemnts as separate user/pass

This makes it easier to call from other methods
Add a separate parser for unzip and http arguments
Use the new unzip/http args in artifacts
Additional logging, fix to FileException args
Fix test_artifacts with the new http/overwrite args
Upgrade should now be possible from a local or remote server.zip
Fix some typos and incorrect log messages
Fix self.dir and dir variable errors

PSA: Don't use variables with the same name as a python builtin
Add a test for Upgrade.get_server_dir
Implement unzip using Python's zipfile module
Remove --unzip and --unzipargs
Remove --unzipargs from .travis.yml
Add workaround for when zipfile uses / on Windows
Change default overwrite option to keep

This is the most backwards compatible option, though we may want to change it to error in future