Working Branch and Bound Solver

CLIDriver now has a branching method and a doBranchAndBoud, methods
that are the real meat of the solver. These methods branch and prune the
configurations and continue by doing a depth first-search at each
iteration to find a feasable solution better than the original upper
bound.