Sudoku solver...either solves easy ones instantly or gets stuck in an infinite loop.
Solver works now.  Made some optimizations so that it doesn't copy the grid and blank cell list on every move.
Performance improvements; couple tests
Further performance optimizations; make solve_sudoku return the solved grid
Solver returns correct value for invalid grids