Fix hard coding of environment variables

We reference environment variables through variables at module scope so
they can be changed in just one place.  Clean up the last few uses.
Fix test handling of failed commands

Exception that occur when shell commands return non-zero exit codes are
now captured so that we can still echo the output to screen for debugging.
You can also make sure certain commands are failing in the test harness.
Create Package DB for meta data storage/lookup

Replaces the internal dict used by the package repo and tree classes.
Refactor out environment save/restore

I want to use this in different contexts (like building things!).
A set of 3 interdependent test packages

These packages are to help test dependency based installation.

Details on these packages:
 * faketools - pretends to be auto tools
 * libgreet - a C++ library the prints hello world
 * greeter - a C++ program that uses libgreet
Environment jump sets build variables

We now set things like CFLAGS and LDFLAGS so that configure and CMake will
pick up on the libraries we have installed.
Handle package dependencies

The "dependencies" key includes of packages that must be installed before
building, installing, and/or using that package.  The install system makes
sure to install those first.
Multiple version support for test packages

The test package tree generator now supports name\d*.xpd.pyt format xpd
template names.  This way we can generate multiple versions of a package
from the same set of files.  This will be used to test versioning.
Support for installing specific package versions

There are no fuzzy version matches, yet, but you can depend on specific
versions just fine.  You can also install specific versions, the syntax
is:

    xpm install mypackage==1.2.3