Refactored GUI handler

Instead of the plain UI handler having a method to return a gui_ui
option, we now have a Gui.ui_type variant. This avoids creating circular
dependencies where the Ui module ends up depending on all the GUI
interfaces.