Use keyword arguments for Puzzle.initialize so we can initialize with
a filename or a setup string.
Only solve the puzzle on the command line if invoked from the command line.