settings: Derive from GObject
and cleanup the code. Also add related APIs to get/set various properties.
If the object is derived from GSettings, users may modify the underlying GSettings directly which may result in undesired states (eg: property changes may not be notified)
Also adapt to changes