Add sudoku solution.
Clean up sudoku.py.

The puzzle is solved by eliminating all impossible numbers from the
cells. For each cell, it’s maintaining a list of potential candidates.
Every time it adds a number to a cell, all the related cells are
updated.  Once it find a list that contains only one number, it fills
the corresponding cell with that number.
When there’s no more numbers to kick out from any list, it starts
searching recursively for all the possibilities. To make the search
quicker, the shortest list is chosen in each recursion. I choose
Priority Queue in order to get the shortest list in O(lgn) time.

The solution solves the hardest sudoku in less than half a second on my
laptop (2.3 GHz Intel).