Implement support for compressed labels in parsing.

Calculate the offset and continue parsing from there. Restore the offset at the
end of the label. Try to be robust when hitting bad offsets.

Update the test as it was relying on compressed label parsing not being imple-
mented. Now we stop parsing on bad offsets. Add more logging to be able to
follow whats going on. Also update the tests to only parse the expected records.
Make service_type parsing more robust and add tests.
Rework the service announcement.

Implement a state machine, that does 3 probing cycles to check if the service
name is free to use. Restart the state machine with a generated name if the name
is already taken.