Generalise the constraint set ADT in a couple ways
We now track target packages and only require constraints on those targets to be satisfiable. This allows us to overconstrain packages that we do not care about, which is useful for excluding broken packages. We also now have a more general way of specifying constraints. Previously constraints were specified as the conjunction of a version range predicate and an optional installed constraint. This form made it impossible to express constraints such as "exclude this source package". Constraints for a package name are now specified simply by a function predicate on the package version and installed/source state.
This diff is collapsed.