Fix concurrency issues; Future thread continue to run after timeout.

Improve board evaluation.

Issue: sometimes the program makes bad decision, late in the game (when about half the board is full); Even when the opponent is about to win the program does not prevent it.