hackage2nix.hs: implement more sophisticated package set building logic
hackage2nix.hs: implement more sophisticated package set building logic

We distinguish between the "default package set" and the "extended
package set". The default set contains exactly one version per package.
Unless specified otherwise in 'defaultPackageOverrides', that would be
the *latest* version. This package set is what Nixpkgs users get when
accessing the unversioned attribute names, and that package set is what
finalizePackageDescription uses to determine whether a package is broken
because of missing dependencies or not.

Furthermore, the extended package set contains additional packages (i.e.
the latest versions of those packages that were overridden in the
default set) which end up as versioned attributes. These play no part in
the default dependency resolution, but users may use those attributes to
fix builds manually by providing appropriate overrides on the Nixpkgs
level.

bennofs/cabal2nix,psibi/cabal2nix,jb55/cabal2nix,Fuuzetsu/cabal2nix,gridaphobe/cabal2nix,dmalikov/cabal2nix,spencerjanssen/cabal2nix