* Pass a reference to the main window instead of constructing a new uninitialized window for state_machine alone
* remove the `std::list<Object*> objects` in `Layer` since it's shadowing the `std::vector<Object*> objects` that it inherits from `Object`
* make all `draw` functions into `Draw`, calling sometimes one and sometimes the other was confusing and was already used wrong

didn't touch the rest of the duplicate functionality, there should be a lot of things cleaned up