Bunch of refactoring

hard to explain but the main loop is run off of events
as is the draw ordering
works nicely