Add a magic number and protocol version to serialized output

Changes the serialization format (yet again) so that it is now
a tuple consisting of

   uint32 magic_number (== 'gvso' in hex)
   uint16 protocol_version (== 1)
   a(sv)  entity_array (as before)

This allows (in principle) updating the serialization format in
a backwards-compatible way in future.

This commit also fixes a couple of memory leaks spotted with
Valgrind, which I really should have committed separately but
never mind
vala: Add vapigen.m4

Avoids hard dependency on vapigen by including the m4 locally
vala: Add configure check for vapigen
vala: Add Vapi generation to Makefile.include

VAPI generation relies on introspection, so put this within the
HAVE_INTROSPECTION conditional. This is probably a bit redundant
as configure should already check this for us, but better safe
than sorry.
vala: Add a basic Vala testcase

The condition enabling this in the Makefile is wrong, as it looks
for ENABLE_VAPIGEN rather than whether this Vala compiler was
actually detected. This probably doesn't matter though as it's
unlikely you'll have vapigen installed without valac, I would have
thought...
vala: Use the --debug flag when building vala test

...so that assertion messages use the Vala function name/line number
rather than those from the generated C file
Handle properties of G_TYPE_INTERFACE type

If an object has a property which is of type G_TYPE_INTERFACE, we
just serialize the object implementing that interface. This is
the same as we do for inheritance, i.e. if the property specifies
that it is of type MyBase and it is currently holding a MyDerived,
then the serialized output will contain a MyDerived.

For both inheritance and interfaces, this requires that the
derived GType name is available at deserialization time, and of
course implies that the derived type can be deserialized properly.
If this is not desirable (for example if you are using a GInterface
for your public API but your private implementation is unstable),
then you'll need to customise the serialisation in some way.

At least, when it's possible to do custom serialisation, which is
not yet...
Add test using interface properties

...in Vala, because writing all the C boilerplate for a test
object, an interface and an implementation would take ages, and if
it works in Vala then it will work in C.
Fix typos in README.md
Deserializer: fix leaking GValue
Add supported (certain) boxed types

Specifically, string arrays (GStrv) and GBytes, mostly because
these have 1-1 GVariant representations.

Well, almost: it turns out that GBytes is fine with embedded
NULs, and I think GVariant's (ay) should be too, but the
API to get a "bytestring" doesn't support it, so we work around
that.

Also, add a boxed type test