Fix error handling and add Piece#perform_move.