Prevent accidental creation of messages without address.

This was only needed when receiving, so refactor that a bit to use a
factory method. Unfortunately this requires a move or copy ctor to be
declared (not to be implemented, due to RVO), the move one is fine anyway,
copy makes no sense semantically though.
Prepare to decouple message types from the build in types.
Make message type handling symmetric with the receiving side.

Also, remove the last bit of special handling for build in message types.
Clean up message sending code to expose less of its internals.
Rename Message::stream() to something more descriptive.
Set a fixed QDataStream protocol version.
Do the message encoding/decoding manually.

QDataStream adds the payload size again. Also get rid of most hardcoded
sizes.
Clean up canReadMessage() to be consistent with read/write.
Create the stream on demand.
Move our own address to the base class, needed in Client as well.

Also, expand the documentation a bit.
Rewrite the object management in Endpoint.

We now keep the mapping for all needed directions there, making additional
maps in Server unnecessary. This also moves destruction tracking of
message handlers into the base class, which will benefit Client.
Give objectAddresses() a more sensible return type.

Now that we don't have the map internally, there is no point in using that
for transfer either.
Make handlerDestroyed() pure virtual.
Add unregistering of message handlers.
Tell the server which objects are currently monitored.

This allows us to not spam the client with change notifications from the
large amount of existing but unused/not visible models for example.
Make connecting asynchronous.
Check that we get the server version message first.