Instead of storing PackageInfo objects directly in the
PackageLists, store PackageInfoRefs instead. This makes a
lot of operations much cheaper, and it also allows making
changes to a PackageInfo (which now exists only once)
and have those changes reflect everywhere. In particular,
it will be easier to populate some information of the
PackageInfo lazily, and to listen for changes on a
PackageInfo object.