Refactored move checking

This changes the game rules such that a tie between a throw-invulnerable
move and a throw goes to the thrower. This nerfs throw-invulnerability
only slightly, but is more sensical as a resolution and also represents
a huge performance gain on the move check loop compared to the previous
implementation.