fix: use the stone map for equality of hexboards, the taken list depends
on the put order

- fixup to 848534109bcd14b7d56ea6659948316acd4b85c6
adjust rules
keep the set of free files in the board, avoid repeated calls to hex_fields
do not specify Lazy, just use evalState from Control.Monad
use a single int64 to mark the seen fields in traversal
store only a key part in the game cache, saves some memory
rotate hex points
rotate hex boards
rotate catchup
added unique
calculate normal form from all rotations
map all successors to their normal form and keep only one of a kind
move utilities into Util.hs
move HexPoint into HexPoint.hs
move Player into Player.hs
move class decl Put into Put.hs
move Point2D into Point2D.hs
import Player qualified
import Put qualfied
avoid exporting the ctor of Point2D