Fix import errors in tool.py

The explicit relative import change in 88bf7b3 caused issues with
running tool.py in plowshare/ (ValueError: Attempted relative import in
non-package). Moving it to the /bin directory with the import changes
here fixes it.
Don't write Python bytecode on tox runs
Small PEP8 style changes
Extract common code between download and upload methods, unify return values

This change allows us to add retry and failover mechanisms that will
work for both downloads and uploads. Also, it makes sure both methods
return the same data structure to keep the API consistent.
Rename 'upload' to 'source' in a download context

Less confusing.
Add host failover for downloading

Host errors are currently tracked in-memory, but it would be ideal to
keep the host list and error logs in a DB (SQLite?), which could be
queried for "errors per host within a 24hr period", for example.
Add host failover for uploading
Move settings into plowshare package to avoid import errors

Previously the build would fail on Travis with 'ImportError: No module named settings'.
Simplify Travis configuration, add retry for pip
Add multiprocessing Pool mock to make tests deterministic

By not mocking out Pool previously, tests would run parallel threads
which made it impossible to make a deterministic test as to what the
actual result would be, which caused ocasional and seemingly random
errors when running tests with Travis or Drone.
Merge pull request #6 from imiric/feat/failover

Failover hosts on uploading and downloading