Sentry Issue: [POSTHOG-821](https://sentry.io/organizations/posthog/issues/3707400683/?referrer=github_integration)

Sentry is reporting that when listing session recordings loading persons is n+1

Looking at how the query works 

we 
* load person distinct ids for recordings in the list
* load the persons that have those distinct ids
* create a fict of distinct id to person
* for each of the recordings
    * look up the  person in the dict and pass them to a `PersonSerializer`
    * that looks up the person's distinct ids while choosing Person's `name`
    * (maybe only when there's no email) in order to determine the first distinct id for the person
    
 That final lookup of distinct ids is (**I think**) where the n plus 1 problem is. 
 
 For each person one at a time we go to the DB and get their distinct ids
 
 There's no foreign key from `Person` to `PersonDistinctId` so we can't utilise `select_related` here. 
 
 _maybe_ we can if we use a list serializer for Persons and then combine the two lists
 
 Some of the reports suggest 50% of the time generating the list is spent loading persons
posthog/api/session_recording.py
self, request: request.Request, session_id: str, start_time: Optional[datetime]
    ) -> Tuple[SessionRecordingMetadataSerializer, RecordingMetadata]:
        session_recording_meta_data = SessionRecording(
            request=request,
            team=self.team,
            session_recording_id=session_id,
            recording_start_time=start_time,
        ).get_metadata()
        if not session_recording_meta_data:
            raise exceptions.NotFound("Session not found")
        if not request.user.is_authenticated:  
            raise exceptions.NotAuthenticated()
        viewed_session_recording = SessionRecordingViewed.objects.filter(
            team=self.team, user=request.user, session_id=session_id
        ).exists()
        session_recording_serializer = SessionRecordingMetadataSerializer(
            data={
                "segments": session_recording_meta_data["segments"],
                "start_and_end_times_by_window_id": session_recording_meta_data["start_and_end_times_by_window_id"],
                "session_id": session_id,
                "viewed": viewed_session_recording,
                "description": session_recording_meta_data.get("description", None),
            }
        )
        return session_recording_serializer, session_recording_meta_data