Move SPICE_GNUC_VISIBLE to red_common.h
Add reds_stream.[ch]

Gather common RedsStream code there rather than having it
in reds.c
Move sync_write* to reds_stream.h

They are renamed to reds_stream_write*
reds: Move SSL-related code to RedsStream

Code to initiate a SSL stream belongs there
Introduce reds_stream_new() helper

Initializing a new stream means initializing quite a few fields.
This commit factors this initialization in a dedicated reds_stream_new
helper. This also helps moving more code from reds.c to reds_stream.c
Move stream read/write callbacks to reds_stream.c

Now that stream creation and SSL enabling are done by helpers
in reds_stream.c, we can move the initialization of the vfunc
read/write pointers there too.
Move async code to RedsStream

The AsyncRead structure in reds.h wraps an async read + callback to
be done on a stream. Moving it to reds_stream.h is needed in order
to move SASL authentication there.
Move SASL authentication to reds_stream.h

SASL authentication mostly use members from RedsStream to do its work, so
it makes sense to have its code in reds_stream.c. This should allow to make
RedsStream::sasl private in the future.
Add RedsStream::priv

The private data is allocated at the same time as RedsStream and
goes immediatly after the main RedsStream data.
This private member will allow to hide internal RedsStream
implementation details from the rest of spice-server.
Introduce reds_stream_is_ssl()
Make RedsStream::ssl private
Make RedsStream read/write functions private
Make RedsStream::sasl private
Make RedsStream::async_read private
Introduce reds_stream_set_info_flag()
Introduce reds_stream_set_channel()
Make RedsStream::info private
Add reference manual

This manual documents how to enable/use various SPICE features when
creating a VM by running QEMU directly, or when using libvirt, or when
using virt-manager.
This is based on work by Lubos Kocman