Shadow the built in tmpdir fixture to use our Path object

* Uses the same generation method as the built in tmpdir, simply
  returns a different object type.
Refactor tests.lib into classes that can be used to modify state
Use our classes from tests.lib.* in pytest fixtures
Replace explicit calls to reset_env() with the script fixture
Explicitly pass around a directory for tests.lib.local_repos
Don't depend on relative file path for test data
Hide assert_all_changes from the traceback
Work around race conditions in the code
Use pytest-xdist to distribute the tests over multiple CPUs

* We've selected a concurrency number of 16 because that's how
many CPUs the multiprocessing library tells us a Travis box has.
Remove configuration for pip mirrors
Define a hash seed for stable dictionary/set order on Python 3.3+
Use monkeypatch to force shutil to not use the fd functions
Namespace the PipTestEnvironment inside the temporary directory
Wrap the test data in a helper that will copy to the tmpdir

This is needed because the various activities that exericsing the
tests do will cause files to change inside this data directory. If
we do not make it test specific then we run into concurrency issues.
Isolate the tests from the shared data directory
We already have the in development version installed in the venv
Determine the src directory automatically
Fix some missing find_links -> data.find_links switches
Use a constant for the source directory
Instead of monkeypatching setuptools on Travis, just upgrade it