Mucho-Change-o.

-Added Stats class.

-Added Stats all over every function (there's more info to be logged
however that we should log).

-Added an indentedLevel int to our Game class to know how deep we are
into game (Game->Round->Trick), used to format the GameStats when
logging.

-Added a concludeGame function to return the statistics.

-Changed isValidGameType, it is now called validateGameType, as all it
does is take a gameType, check for errors, and if it encounters any, it
fixes it. Our gametype will always appear valid now.

-Made DummyPlayer return random GameTypeOptions information so we can
get some real test data. Also made it's setGameType(...) set the private
global values for no reason.. Whoop?

-removeCard(Card) didn't work in Pile, because we passed a duplicate of
the Pile to the user, they'd give us a different card instance that
looked the same, but wouldn't actually be the same, so it wouldn't find
it in our list. To overcome this I removed copyCard (we don't need it
since Card only has getters and it's safe from modification).

-Because we removed copyCard() in Card, we had to fix the private
constructor for Pile, so it doesn't add a copy of the card when copying
the pile, but adds the same card to the new pile. So the card instance
is in both piles. This will do for our removeCard fix, and will be safe.

-In GameStats.java->RoundStats->logError(), we might want to change the
way we terminate and print when we hit a critical error.. Maybe just
make use of a proper exit code, or some crap..

-We also want javadoc for GameStats.. should only take a few seconds..

-After making DummyPlayer generate random gameType data, I realized the
checks for ouvert implying schwarz, implying schneider must take into
account Null games. Null games cannot have schwarz/schneider with my
code, but it can have ouvert? My code will mess this up and make a Null
+ Ouvert + Schwarz + Schneider game...