Introduce configurable layout

This feature is very much in its infancy, however users can now override
the default layout by editing ~/.config/budgie.ini which will be read at
start up, enabling a very flexible layout.
Note that several changes were made to the plugin API to enable multiple
instances of applets, moving towards a Factor::Impl methodology. It
is only possible to have a single instance of each plugin, which in
turn provide applet instances.

The default layout is provided in @datadir@/budgie-desktop/layout.ini,
and may be overriden by the vendor for their distribution. Initially an
attempt was made to use GSettings and relocatable schemas, however I have
deemed this not yet suitable for use, so will attempt to liase upstream.
Notable issues include the lack of API to iterate child relocatable schemas
in a given directory, and the ability to delete a path which is using a
relocatable schema. This means that we would either need to interface
with dconf directly, indicating an incomplete API, or rely on manually
calling --reset on dconf, however this is hacky and should actually be
resolved in glib.