Preliminary support for GVariant

Add preliminary support for GVariant types as a built-in type.
Do not leak Objects which are not InitiallyUnowned

The semantics of TransferEverything for GObjects is slightly different
for GObjects that descend from InitiallyUnowned (IU) and GObjects that
don't (IO). For IU objects we take ownership with g_object_ref_sink, but
for IO objects we simply steal the memory. In both cases we free the
memory with g_object_unref when we are done.