- Checks for sufficient material.
- Major optimization: game state function only needs to check if iterator has a next move
- Minor optimizations: inlining bounds check, short circuiting game state function
- Code cleanup: unused functions deleted, more methods made private