Added a GameEvent to make dealing with the events easier. It allows for easier handling
of simalataneous events from the same controller as before it only handled one with
the hash map.

Also made some other modificattions, such as adding an equals method for the controller
implementations so that they are comparable properly