Added a GameState object to store the main game elements.  GamePanel
retrieves current GameState object and then uses it while rendering.
During a frame run, GameEngine clones the current GameState, changes the
clone, and then makes the clone the new current GameState.  Also, since
user input can modify the game state also, added synchronized keyword on
player command methods and the run method so they can't both modify
GameState at the same time.