This makes the Extension class usable as item-type in models, and allows us to use property bindings. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3067>
The extension handling is currently intertwined with the UI. Splitting it out provides a clearer separation, and will allow us to switch to a model-based UI later. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3067>
Using a single source file is getting unwieldy, so start splitting it up. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3067>