a better resolver that tries all paths to resolution

if a graph is under-constrained we try every possible combination of under-constrained variant to be able to resolve. it starts with the simplest combination (forcing one by one variant and trying) and then expands to all combinations of all under-constrained variants.
It is expensive, but seems to be working

NOTE: needs cleanup
clean up and fix forced variants that were too strict
fixes all current test cases

Need to improve code quality also performance is REALLY poor on unresolved graphs