Made the GUI code as neat as possible using a code skeleton I had lying
around. I know it seems obnoxious since it's split into like 6 files,
but it will be incredibly easy to deal with visual/input stuff from now
on.

The implementation for GUI.h is split up into a bunch of different
self-explanatory files that handle different parts of the interface.
This allows all GUI-related things to share the same objects (since they
are just a single entity from the compiler's point of view). So we don't
have to pass data back and forth between event handlers and renderers,
etc... thank god. The main loop begins in GUI.cpp.

VirtualEvent.h and VirtualEvent.cpp form a class that is mostly virtual
(duh). Basically, if you want to catch a new SDL event, you just have to
override the corresponding method in GUI_Event.cpp and GUI.h. The
annoying input loop is already done in VirtualEvent.cpp.

The character clipping is still not working (sorry for continually
breaking your code), but now you can handle that in GUI_Event.cpp
instead, since GUI.h stores the canvas, which has pretty much all
the data we need. Whatever you have to do to not pass a Dungeon
pointer to the character. I'm trying to use a Model-View-Controller
layout, where Dungeon and Character are models, GUI_Render.cpp is
the view, and everything else is a controller.

Longest commit message ever?