Fix move choice validation properly

The previous implementation of move choice validation allowed various
checks to be bypassed with crafted /move commands. For example, it was
possible to use arbitrary moves while in the invincibiltiy phase of
two-turn moves:

  http://pokemonshowdown.com/replay/dev-customgamenoteampreview-205

This commit fixes the validation mecahnics.

Compared to the last attempt at this, this commit also properly
handles Hidden Power.