Adds deep_dup methods to Piece and Board classes.

deep_dup copies all instance variables. This method will be used to create
duplicates of the board and pieces in order to modify them without affecting
the original board.
Added perform_moves method
Adds endgame detection and debugs player input.