Adding Easy and Hard AI
Adding EasyAI
Changing possible combos to public instead of private
Adding functionality for GameRules and HardAI
Checking if a winner exists and if a move is valid
Adding tests for GameRules
Cleaning up make_move to return any move whether in board range or not
Changing message to reflect new HardAI
Adding validation for successful move and using GameRules to determine game_over and draw
Adjusting tests for EasyAI