Reduce Hibernate Session lifetimes for games, which may be related to #89. Now, we're loading the cards out of the database when the game host tells us which card sets to use, and never touching the database again if the card sets never change.
Also, don't load every card in every card set when loading the card sets when a player connects to the server. We only need a count of the cards in the card set at that point.
Switch to using a ScheduledThreadPoolExecutor instead of a Timer for scheduled tasks. This will allow 2 * CPU count threads to handle background tasks instead of using a single thread, which could cause the server to effectively die if a task gets stuck for some reason. This addresse the symptom of #89, but not the cause (which is yet to be determined).