Introduce Move and State classes

This makes the code run a little bit faster. I promise I'll stop hacking on your code soon. It's probably worth pointing out that the benchmark runs these tests 10 times each, so we're looking at a total of ~120 ms for running all the benchmarks once. Not sure how that compares to the JavaScript version on your machine.

### Before this change (~7925 ms)
$ dart test/perft.dart
... 1434000.0 us.
... 3427000.0 us.
... 1697000.0 us.
... 1366500.0 us.

### After this change (~1191 ms)
$ dart test/perft.dart
... 524250.0 us.
... 348833.3333333333 us.
... 199090.9090909091 us.
... 118705.88235294117 us.