Optimizing SeatType & TableTypeDescription + more

General performance improvements:
The SeatType class is now a struct and uses an enum instead of a string
+ int.
SeatType have a new property: isEmpty, it is true if SeatType was
initialized using the default constructor.
There is a custom coded integer parser "FastInt" for parsing seat
numbers and button indexes.
Player.HoldeCards is initialized to null to avoid allocation for players
with no holecards.
Player also have a new property hasHoldeCards that checks if the player
have holecards.
PlayerList.Add() uses a binary search to insert players in the right
position directly.

PokerStars Optimizations:
Using FastInt.Parse() for ButtonIndex, SeatIndex and maxPlayers.
GameType parsing uses that calculated gameTypeLength instead of the
length of the substring.
Faster Showdown scan.