Reorganize solve
Introduce optional generation limit
Implement logger observer
Puzzle submitting
Parse puzzle from json