Ensure a dirty checkout is considered more recent than a clean one
Don't touch own environment

This is done mostly for sanitary reasons. There is no need to change our
environment, but we definitely want to affect the environment of the
rebooted process.
Fix package handling

Project-specific package listings were fetched, but not added to the
environment, leading to a broken PyPIBasket and bootstrap script.

Additionally, Basket would only keep the last added package for any
given package filename. While this would seem to give precedence to
remote packages, make_local always checks whether the local file exists,
before requesting a remote fetch. This is something that could break
fallback handling, by reducing the set of available download options.

In the process, Basket.add_egg() was renamed to add_package(). While the
function currently checks whether the given filename looks like an egg,
this could be extended to handle different package types and we don't
want to leave that burden on the basket implementation side.
Fix variable names

(I will test code before committing and pay special attention to
refactorings and wholesale renames...)
Removing quotations from ETag once will be enough...

(Promise I will!)
Taking metadata as keywords makes us vulnerable to name clashes

The first victim was PyPIBasket and the filename parameter.

(See, this is me testing...)
Fix parameter name clash

Also, since package metadata no longer relies on keyword arguments, we
might as well drop the dictionary altogether.

(Still testing!)
Simplify basket registration by using instance url

For PyPIBasket, we further commit to using the instance's URL, enabling
it to be used with other repositories that implement PyPIJSON in a
similar fashion.
Lazily initialize baskets

In particular, PyPIBasket is instantiated on any import, so delay work
until it is used.
Enable S3 repositories by default

Given that these have no external dependencies, they might as well be
available by default.
Make soft/hard transmute split more obvious
Allow 'hello' test package to be used unpackaged
Fix transmute.add_source
Only keep track of missing entries to sys.path

When satisfying requirements, distributions explicitly added to sys.path
are now considered part of the working set. For those packages, updated
distributions will be ignored. All others will be updated from
configured sources.

This has a couple of nice properties, not the least of which is that it
solves an infinite hard-transmute loop. It also offers an easy path to
skip updates, by explicitly adding eggs to PYTHONPATH.

Resolver.reset (and thus, transmute.reset) are dropped.
Add tests for bootstrap.py
Simplify conflict detection