I wonder if we even need `play` to be mutable. I mean the general use case will probably be doing tree searches (possibly in parallel even) and to go back up the tree you need the previous position which is easiest done by keeping the previous board around (I assume at least). So if play were to return a new board instead of mutating the current one we wouldn't need a separate function (is this the name in Rust?) to clone the board.

Does that make sense or is that not the way to do it in Rust?