IMPORTANT(transcription): resolve speaker identity and track sid
The legacy data packet always told the application which participant spoke and which track carried
the speech. A transcription stream does not always give the same two facts. This commit fills the
gaps.
The converter now takes two more callbacks. A later commit gives it the versions that read from
Room.
For the track sid, the converter tries three sources in this order:
1. the lk.transcribed_track_id attribute
2. the microphone track of the participant that it selected
3. the microphone track of the participant that sent the stream
For the speaker, the converter looks for a participant that publishes for the sender. An avatar
worker does this. The legacy packet named that worker, not the agent, so the converter does the
same. The worker is also the participant that publishes the audio track, so a publication can be
found.
The test harness now supplies the two new callbacks. The tests for them come next.
REVIEWER ATTENTION: The chain uses || and not ??. A callback that reports "nothing found" as an
empty string must fall through to the next source. An empty identity finds no participant, and an
empty sid finds no publication. Either one stops the track events without a warning.