GSettingsBackend: simplify event handling

Drop the 'vtable' business and switch to a single callback that takes a
new GSettingsEvent structure.

This patch temporarily regresses delayed settings: if a key set within a
delayed settings backend becomes non-writable, it is no longer removed
from the changeset.
GSettings: remove main context logic from backend

The main context dispatching logic substantially complicates the backend
and is only needed for the GSettings frontend.  Move it there instead.
GSettingsBackend: move 'has-unapplied' logic here

Add GSettingsBackend API to allow any backend to have a 'has-unapplied'
property.  Remove the 'owner' hackery that was used for notifying of
changes to 'has-unapplied' and just use normal GObject notify (and wire
into that from the frontend).
GSettings: change API of writable-change-event

This is an API break.  It modifies the writable-change-event signal and
vfunc to be more like the change-event signal.

I don't think anyone is implementing or connected to this.

Also, remove a lie from the documentation for the same signal.
GSettingsBackend: turn 'event' into a proper signal

Now that signals connected to GObjects are threadsafe, it is far easier
for us to do it this way.
GSettingsBackend: add vfuncs 'apply' and 'revert'

Remove this API from GDelayedSettingsBackend.
GSettingsBackend: add 'delay' vfunc

This vfunc gets a delayed settings backend appropriate for use with this
type of GSettingsBackend.
drop GDelayedSettingsBackend

This breaks the tests, but will be added back in another form soon.
GSettingsBackend: remove 'write_tree' vfunc

This was only used by the (now removed) delayed settings backend.
GSettingsBackend: drop the concept of 'origin_tag'

This was only used by the (now removed) delayed settings backend.
GSettingsBackend: add list support vfuncs

Implement it for GMemorySettingsBackend.
GSettings: add child add/remove APIs
GSettingsSchema: add API for introspecting keys

So far only supporting getting key summary/description.

https://bugzilla.gnome.org/show_bug.cgi?id=668232
GSettings: add g_settings_is_set()

Also add the equivalent vfunc to the backend.

https://bugzilla.gnome.org/show_bug.cgi?id=668233