Given a root and a dependency list, return a list of possible
solutions to the dependency set. Each solution is a list of
package versions which satisfy all the dependencies. Note that if
a package is mentioned in two different clauses of the dependency
list, both clauses must be satisfied:
 a (>= 3.0), a (< 4.0)  b (>= 2.0), c (= 1.0) becomes
 a (>= 3.0), a (< 4.0), c (>= 1.0) OR a (>= 3.0), b (>= 2.0), c (= 1.0)
 [[a (>= 3.0)], [a (< 4.0), b (>= 2.0)], [c (= 1.0)]] becomes
 [[a (>= 3.0), a (< 4.0), c (>= 1.0)], [a (>= 3.0), b (>= 2.0), c (= 1.0)]]
So we can use each clause to eliminate packages which cannot
satisfy the dependency set.
