launch-environment: disconnect session signal handlers when destroyed

The launch environment's session can actually live longer than the
environment itself.  This is because the session creates internals
"conversation" objects that take a reference on the session, which
sometimes keeps it on life support.

This commit makes sure the session signal handlers for the launch
environment don't get run after the launch environment is destroyed.

https://bugzilla.gnome.org/show_bug.cgi?id=726380
Integrate the slaves into the main daemon process

For no particular reason, the slave has been kept as a separate process.
Integrate this into the main display process by simply making the display
keep a handle to a GdmSlave object. To keep the cleanup simple, we won't
remove the GdmSlave subtypes yet. A future cleanup should merge the slave
functionality into GdmDisplay and its subtypes.

https://bugzilla.gnome.org/show_bug.cgi?id=726380
display: Enforce a few invariants

The GdmDisplay should only be cleaned up if it's finished
or failed.

https://bugzilla.gnome.org/show_bug.cgi?id=726380
display: Remove some unnecessary parts from dispose

These can't possibly be active and armed if we're disposing.

https://bugzilla.gnome.org/show_bug.cgi?id=726380
display: Clean up old signal handlers

The signal handlers here are intended to be used if the slave itself
tries to stop, for instance if the server or greeter die, and will
try to finish the display on its own.

Letting the signal handler run again will finish the display *again*
after an idle, meaning we have this path:

  gdm_display_finish
  gdm_display_unmanage
  on_server_stopped
  queue_finish

  ... idle ...

  gdm_display_finish
  gdm_display_unmanage
  on_server_stopped
  queue_finish

  ...

This might have been an infinite loop, except for the fact that GDM
smartly has code to detect the failure state where the X server
starts up and stops sufficiently quickly, and in that case transitions
the display to the FAILED state, which causes GdmDisplayStore to
unref the last ref on the GdmDisplay.

Since the finish is still queued, finish_idle runs, and very quickly
discovers that our object is no longer a GdmDisplay, so this very
quickly manifests into a:

  gdm_display_finish: assertion 'GDM_IS_DISPLAY (display)' failed

error. Not before poking a hole and corrupting some memory trying
to clear the finish_idle_id, however.
manager: update session-id when starting user session

In order for session unlocking to work properly, the session-id
property of the display object needs to match the session running
on the display.  The display object's session-id property is bound
to the slave's session-id property, so this commit makes sure
the slave's session-id is updated to the user's session's id once
the session is started.

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