Improve eight puzzle implementation

- Replace regular list with priority queue
- Implement greedy best first search
- Implement manhattan distance heuristic
- Implement misplaced tiles heuristic