Remove polymorphic stuff
Propnet optimizations

- Remove duplicate logic blocks
- Enable state machine cloning
- Write multi-threaded pure monte-carlo player
2-player alternating-play MCTS
Big perf wins by optimizing Move

Avoid lots of unnecessary hash lookups - but it's a big disruption to
the codebase.