Generalized sudoku solver that tries to be smart