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/test/test_email.py
mock_email_message.call_args[0][0], "PostHog weekly report for Sep 14, 2020 to Sep 20",
        )  
        self.assertEqual(mock_email_message.call_args[0][1], "weekly_report")
        template_context = mock_email_message.call_args[0][2]
        self.assertEqual(template_context["team"], "The Bakery")
        self.assertEqual(
            template_context["period_start"], datetime.datetime(2020, 9, 14, tzinfo=pytz.UTC),
        )
        self.assertEqual(
            template_context["period_end"], datetime.datetime(2020, 9, 20, 23, 59, 59, 999999, tzinfo=pytz.UTC),
        )
        self.assertEqual(
            template_context["active_users"], 6,
        )
        self.assertEqual(
            template_context["active_users_delta"], 0.5,
        )
        self.assertEqual(
            round(template_context["user_distribution"]["new"], 2), 0.17,
        )
        self.assertEqual(
            template_context["user_distribution"]["retained"], 0.5,
        )
        self.assertEqual(
            round(template_context["user_distribution"]["resurrected"], 2), 0.33,
        )
        self.assertEqual(
            template_context["churned_users"], {"abs": 1, "ratio": 0.25, "delta": None},
        )