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
session_recording_id = kwargs["pk"]
        recording_start_time_string = request.GET.get("recording_start_time")
        recording_start_time = parser.parse(recording_start_time_string) if recording_start_time_string else None
        session_recording_serializer, session_recording_metadata = self._get_serialized_recording_metadata(
            request=request, session_id=session_recording_id, start_time=recording_start_time
        )
        session_recording_serializer.is_valid(raise_exception=True)
        try:
            person: Optional[Person] = Person.objects.get(
                persondistinctid__distinct_id=session_recording_metadata["distinct_id"],
                persondistinctid__team_id=self.team,
                team=self.team,
            )
        except Person.DoesNotExist:
            person = None
        if request.GET.get("save_view"):
            SessionRecordingViewed.objects.get_or_create(
                team=self.team, user=request.user, session_id=session_recording_id
            )
        return Response(
            {
                "result": {
                    "session_recording": session_recording_serializer.data,
                    "person": PersonSerializer(instance=person).data if person else None,
                }
            }
        )
    
    @action(methods=["GET"], detail=True)
    def snapshots(self, request: request.Request, **kwargs):