Tweak comment
Make bootstrap script executable
Closing once will be enough
Might as well close this request too
Move bootstrap script inside the module

This, despite the point of the script being to be used independently of
the remainder of the module -- to bootstrap transmute and applications
built with it.

This is done to allow the code therein to be imported and reused to make
PyPI more readily available as a source for packages. Other than code
reuse, the script keeps its purpose and must remain independent.
Make bootstrap script (re)usable

This breaks up bootstrap_transmute() and its inner functions into
re-usable components. It also triggered a closer look at the existing
code, and fixing of multiple... ahem... shortcomings:

  - local (cached) files are assumed to be good;
  - to that end, downloaded packages are given a temporary name and only
    renamed to usable name after the MD5 hash has been verified;
  - MD5 hashing will now check beyond the first 16K -- not that this was
    a concern for transmute itself ;-)
  - locally cached packages are usable, even if no network connection is
    available to "find" their names in PyPI...

All code cleaned up, documentation added and brushed up.

There are now three main purposes for the transmute.bootstrap module: it
can be used stand-alone to bootstrap the transmute package; as well as
to bootstrap independent packages and applications from PyPI; its
functionality is otherwise made available to the rest of the transmute
package.

There is now some overlap between what bootstrap provides and what's in
the rest of the package. This will be cleared in subsequent commits.
Tag bootstrapped modules by default
Allow packages in sys.path to satisfy bootstrap requirements

Precedence of packages provided by this module is tweaked so installed
packages are preferred for a given version of the package. A newer
version is preferred regardless of precedence.
Extract reset_system_path function
Offer a shared PyPI basket
Make bootstrap's require reusable

Hoisting working set and resetting of sys.path outside the function
better matches what is currently done in the main transmute module.
Provide package metadata, once package's been downloaded
Make PyPI's URL part of PyPIBasket's API
Allow registration of external basket

This will be used to register bootstrap's PYPI_BASKET.
No point in checking contents of separator
Allow missing local repositories

This is not extremely useful in the bootstrap script itself, but allows
the Basket class to be used unchanged for a repository built from a
directory in the local filesystem.
Split Transmuter class; reuse bootstrap all over

The former Transmuter class is now split into independent Resolver and
Transmuter classes. Resolver is concerned with managing package sources,
and finding packages matching requirements; Transmuter handles the
self-update mechanism, or "transmutation".

The top-level module is reduced to glue code pulling in bits and pieces
from the other modules and providing a simplified API.

The bootstrap module's Basket is now used as the local repository. It
can also be used as a caching base class for remote repositories. The
Python Package Index (PyPI) also becomes the first remote package
source, accessible by using transmute.PYPI_SOURCE or the URL
'https://pypi.python.org/pypi' as a source.

The new class Resolver uses the bootstrap module's mechanism of
resolving packages, where packages in the sys.path are considered
directly alongside remote repositories, where previously sys.path was
searched as a fallback. For a given package version, packages already in
sys.path take precedence, then do locally cached versions of remote
packages, thus avoiding unnecessary downloads.

The new class Transmuter essentially picks up where the former
Transmuter left, with one important change: pkg_resources's user_warning
is no longer trapped to find conflicts. Instead package metadata is used
specifically to check if modules were previouly imported and to trigger
a "hard transmute".

We no longer keep track of entries previously added to sys.path. This is
also not necessary as we generally sync with sys.path when transmuting.
A hard transmute no longer processes PYTHONPATH. It is assumed that
changes to that environment variable are reflected in sys.path, and that
the latter is more up to date.
Reworked version handling to use git describe

Version information is now exposed in the top-level module as
__version__, as suggested in PEP-8. The version is picked from a
(generated) _version.py file, if available.

Generation of version file is handled by setup.py, where a new
update_version command was added. The command is also injected into
packaging commands, such as sdist and bdist_egg, through the common step
egg_info.
Move URL opening out of _download function

This is done to make it usable with URLs not serviced by urllib2, but
that can expose a similar file-like interface.
Add support for an S3 package repository