change available-moves to multimethod
Refactor to using a distinct channel for select and add one for rewind
Move more logic into build-squares
Remove a lot of global state!