Making centuries

Implementation of the brute force search with pruning from Chapter 6.
The implementation in the book relies on the laziness of Haskell to
filter the results in a breadth first search. Doing the same in C++
requires storing an exponential number of candidates in memory, which is
very inefficient. So the search strategy has been modified to perform
a depth first search instead, which allows for relatively efficient
pruning even in an eager language.