Added first heuristic and did minor clean up.

The main thing in the refactoring is making the value selector produce a
potentially filtered/different Variable instead of a value container.
Introduced the first set of heuristics

Tree-based solvers, such as TreeFiniteDomainSolver, have their
performance significantly impacted by decisions for variable selection.
By having VariableRankingPolicy, variables which impact the solution
space most are selected first.