Integrate the optimal move search into Board.

This eliminates the need to pass around a vector of valid moves, as the search
function can generate them directly, resulting in approximately a 25% gain in
performance.

Signed-off-by: Jason Lynch <jason@calindora.com>