keyboard is no longer one massive object, it now keeps only the keys that have been pressed until the moment it is popped from the event observer; mouse is now only a container like the keyboard; event observer can now pop its mouse and keyboard objects; event observer can now optionally not track keyup events
removed mouse and keyboard objects; event observer now keeps key and mouse information
updated test as per the changes to the event observer