marshal: provide type-specific serialization/unserialization functions

Those functions should be used in place of `marshal_serialize()` and
`marshal_unserialize()` if possible.
lldpcli: don't use an hack to pass the writer to watch callback

Use a proper structure for this purpose.
lldpd: fix an alignment (non-)issue
marshal: don't declare serialize/unserialize helper for string

When using convenience library, this may lead to multiple definition
of this function. We are better off not defining it and using
`marshal_unserialize()` in `client.c` instead.
log: fix memory leak when using a log handler

This is quite important for liblldpctl.
marshal: fix alignment issue when unserializing

On some archs (Sparc and sometimes ARM), unaligned access are
forbidden. Instead of copying unaligned structures with `memcpy()`, we
ensure that `struct marshal_serialized` structures are always
correctly aligned, including when they are serialized. This is done by
adding some padding before appending such a structure to a buffer.