A* works, sort of

It now solves the board without crashing or getting into an infinite
loop (if the board is solvable!) but I think it's still too inefficient,
maybe I didn't implement A* properly. All the board states that lead to
the solution are in Solver.closedstack