Add a class for handling pending installs of packages and dependencies.

Review Request #7734 — Created Oct. 25, 2015 and submitted — Latest diff uploaded

PendingInstall is used to queue up one or more packages for
installation. It handles checking if the packages can be installed on
the system, and handles fetching package bundles for dependencies for
those packages (and for dependencies of dependencies). It also provides
the caller with the order in which packages must be installed.

By using PendingInstall, the caller can be sure they're getting
everything they need to install the requested set of packages, and that
they'll be installed in the order required.

Unit tests pass.