NEW : create DepthFirstNodesLimitedSearch

- I used the DepthLimitedSearch idea to do a DepthFirstSearch and cutoff when the number of nodes was at the limit
- The search algorithm was using a recursive function, which is not great to count the number of nodes generated and if ut had been cutoff once. therefore, I created attributes to the function : cpt and cutoff_occurred
NEW : choose to print the generated nodes state
NEW : creation of the heuristic

- The heuristic is going to look at how much numbers we could have put in the location about to be filled
- Therefore, we need to save the location to be filled, which is why we created locFilled in SudokuBoard
- We set the value of locFilled in AddNumber(), but I'm not sure that will work since I'm afraid the heuristic is called before generating the result (therefore before filling the location)
= needs to be tested