When you generate a puzzle, you've generated its solution too

Also:

Improve the documentation and comments

Remove unused from_string method

Remove --generate option.  As long as no pieces are given, we assume
generate is true.

Make change board.move method to take a reverse option instead of
force, so we can be clearer about the assertions in the reverse case.