Refactor TargetMoves

Placing piece-on-an-empty-board move generation into a separate
container will allow it to be reused for testing isMoveValid.