Sort out dbus-glib registration mess
We sometimes segfaulted when stopping a RAID device. The problem here
was that we kept the exported D-Bus object around until it was
finalized (by using weak refs). This was problematic because several
change events were treated as add events but the state of the RAID
device was such that we didn't want to add the object anyway. So we
ended up unreffing the object. Which means that the job completion
func accessed a unreferenced object.
The solution here is to remove the object from our hashes as soon as
we want to remove it.
Since we don't have dbus_g_connection_unregister_g_object() just yet
(available in dbus-glib >= 0.81) we just keep the object on the
bus. If we later wants to add a new object but the old object is still
around we use an undocumented hack to unregister the object.
You will also need eggdbus >= 0.5, otherwise introspection won't work.