Provide service implementation discovery support

For many service types it may be appropriate to build service implementation discovery support. This will use RApaLsSession to discover all applications that implement the service, decode their service's opaque data fields from their application registration files, and present the list to the client in a meaningful way.

For a chat service, this could generate a list of service names presentable to the user in a list.

The service discovery support must check the attacks from server applications that pretend to be existing server applications, or prevent better server applications from being discovered. Conflicts in selection could be presented to the user, or automatic selections could be logged. The service discovery support must reduce the amount of damage a malicious server application could do through registration.