Return player move by callback
Pass callback from GameState to IPlayer::get_move
Fix MockPlayer
Calculate MiddlingPlayer best move in new thread

Note: thre is no protection from calling method on destroyed object.
Add simple protection for callback
Implement MockPlayer::interrupt method
Move logger keywords into logger.hpp
Merge branch 'dev' into improvement-multithreading
Add new class to handle player moves
Merge branch 'improvement-multithreading' into dev
Remove debug log message
Check move success in GameState::process_move
Reduce MiddlingPlayer look-forward value