Base GUI system finished

Known Issue:
Components on top of each other don't update properly until you leave
their bounding box fully. This should be fixable in future by rewriting
the GetComponentAtMouse() method.