demo: Use factory methods to manage GTK demo lifecycle

Instead of redundantly handling the same code pattern in various places,
the GTK demo now uses a factory method to ensure Buxton is connected,
working, file descriptor is monitored and even re-registers the
notifications.

As well as adding some helpful documentation, this commit also now monitors
the file descriptor to react to G_IO_HUP, and will cause the client side
to disconnect and cleanup the socket, so that future buxton_init calls
will merely reconnect, resetup, register for notifications and monitor
the new file descriptor.

Previously, the GTK demo would crash if it failed to set a key, or bt-daemon
was not running. The demo is now capable of reconnecting, and will not
attempt wire operations if the socket isn't connected.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>