Game logic is working for a single human player.
Next on the list:
- write a game model that outputs all possible afterstates, and the
moves needed to get there, given the current states.
Tricky parts:
- getting this to be efficient by using & modifying the original grid,
while making sure the net effect is read-only (make a deepcopy and then
assert they are the same.)
- clearing rows from the middle efficiently... whatevs.

Then: add in feature extraction to the AI, just remember previous/next
features (don't need to remember the entire game state like before.)

Also: decide on a reward system. -1 discounted for loss? 1 point
for each time you stay alive? What?

Also, write a separate playGame method for the human vs the AI.
The one for the AI needs to get a string of moves, execute all of them
(perhaps interspersed with downs) but timing is not an issue.