Record monitor connect/disconnect events.

Each time we receive an XEvent we diff the list of currently connected
monitors with the list of previously connected monitors. Any
differences are recorded using the event recorder API. It is possible
that there will be no differences to record because XEvents are sent
for more events than just monitor connects and disconnects.

[endlessm/eos-sdk#635]
You can still do what @ebassi suggested by using the `@` type specifier (which tells `g_variant_new()`, `g_variant_get()` etc. to take a pointer to `GVariant` for the following type specifier instead of what they would usually take.)

```c
GVariant *edid_data = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, raw_edid, edid_length, 1);
g_bytes_unref (edid);
return g_variant_new ("(ssssii@ay)", ..., edid_data);
```