Fix release from #1860 (hotfix #1934).

- Cron job to send weekly email report is processed multiple times. Review scheduling process to send to only one worker.
- Implement mechanism to ensure each email is sent only once to each recipient.
- Improve the way the async task is processed by creating a separate task for each organization, instead of processing all organizations in a single task.
posthog/tasks/email.py
continue
        last_week_users = PersonDistinctId.objects.filter(
            distinct_id__in=Event.objects.filter(
                team=team, timestamp__gte=last_week_start, timestamp__lte=last_week_end,
            )
            .values("distinct_id")
            .distinct(),
        ).distinct()
        last_week_users_count: int = last_week_users.count()
        two_weeks_ago_users = PersonDistinctId.objects.filter(
            distinct_id__in=Event.objects.filter(
                team=team,
                timestamp__gte=last_week_start - datetime.timedelta(7),
                timestamp__lte=last_week_end - datetime.timedelta(7),
            )
            .values("distinct_id")
            .distinct(),
        ).distinct()  
        two_weeks_ago_users_count: int = two_weeks_ago_users.count()
        not_last_week_users = PersonDistinctId.objects.filter(
            pk__in=active_users.difference(last_week_users,).values_list("pk", flat=True,)
        )  
        churned_count = last_week_users.difference(active_users).count()
        churned_ratio: Optional[float] = (churned_count / last_week_users_count if last_week_users_count > 0 else None)
        last_week_churn_ratio: Optional[float] = (
            two_weeks_ago_users.difference(last_week_users).count() / two_weeks_ago_users_count
            if two_weeks_ago_users_count > 0
            else None
        )
        churned_delta: Optional[float] = (