Implement depth first search to search solution

Runs depth first search after propagating all initial singletons.  DFS clones
the game state and randomly chooses a candidate for the entry atop the heap.
Recursively checks if that choice is a solution.  If not, backs up and chooses a
different candidate.