BUG: use set for pool internals to avoid duplicated packages.
REF: rename Rule to PackageRule.
REF: rename Clause to Rule for consistency.
REF: change naming in MissingPackageInPool to allow package and package id.
ENH: add has_package to Pool.

We also allow for pool to be passed repositories at construction time.
FEAT: add PackageLiteral to allow for easier pretty printing.
REF: use explicit class to track variables.

Using DecisionSet instead of a simple OrderedDict allows to add more
info for debugging and diagnostic (such as which clause caused which
decision to be made).