Add a class for managing the main package index.

Review Request #7718 — Created Oct. 20, 2015 and submitted — Latest diff uploaded




PackageIndex handles serializing and deserializing the package index,
which points to the main packages we keep in the package repository.

The intent for now is to show only the main packages (ReviewBoard,
RBTools, etc.) that we want quick information on. Consumers of
PackageIndex will know, with a single file fetch, the latest versions of
the packages and what package names they can match locally.

As part of this, the package objects can now properly load and chain.
The objects with manifest URLs now contain absolute manifest URLs as
well, built using urljoin() along with a base URL. This gives us the
ability to always grab the right file from any other file, starting at
the index onward.

Unit tests pass.

Used this manually in a test command I have, and was able to navigate
the entire tree of package data.