UI: Layers

Removes the whole floating widget concept and replaces it with layers. The UI is now composed of one or more layers. They get drawn on top of each other, oldest to newest. Only the top one can receive input. This makes them good for dialog boxes and other modal elements like dropdowns.

This actually removes a bunch of special cases, particular in the event dispatcher. Code getting simpler is a good sign you're doing it right :)