Move windowing code out of the compositor

This is mainly just moving code around, in preparation for further changes to
the "windowing" API.