Moved TicTacToe/Engine/* to TicTacToe/Core/*.

Having the namespace "Engine" in both the TicTacToe project and the
Engine project was leading to some compilation errors that were not
trivial to fix.  "Core" is also not a good name, but at least it is
distinct from "Engine".
Moved minimax algorithm into its own class.

Now this algorithm can be reused in multiple games without needing to
write it from scratch each time.
Added game loop, IsEndState, and available moves.

Determining if the state is an end state involves seeing if the current
player has any moves available.  This uses the GetAvailableMovesForPiece
method, but stops after getting the first move.

Also added an IsJumped property to Piece, since, technically, pieces
should not be removed from the board until the player's turn has
completed.  And, added classes for three different types of moves:
sliding a piece, jumping with a piece, and ending the turn.
Moved logic for getting moves to GetAvailableMoves.

Also GetAvailableMoves now returns EndTurnMoves if the curernt player
already slid a piece or jumped this turn.  This utilizes a new property,
MovesThisTurn, which contains the list of all moves performed so far on
the current turn.
Implemented method to get move from human player.
Get automatic moves before getting player moves.
Added move to make a piece a king.
Implemented applying MakeKingMove to a state.
Added applying remaining types of moves.

This includes SlidePieceMove, JumpPieceMove, and EndTurnMove.
Generate EndTurnMove after sliding or making a king.
Added MakeJumped method to Piece.
Implemented methods to copy states and locations.
Add QoL features to printouts for human user.

Print column and row numbers, and print out the current player's team
name.
Moved testing legality of moves into new methods.

These additionally make sure pieces aren't moving backward.