added equals and hashCode to Move so its values behave well in sets
added apply method to Board so we can simulate moves being played (implementation is a placeholder)
new Strategy based on Rules to filter possible moves and a PositionEvaluator to compute the most interesting