## Is your feature request related to a problem?

When setting up dashboards I'd like to filter the stats to a certain page/subdomain. 

## Describe the solution you'd like

Allow adding a extra filters for all graphs on a dashboard (e.g. filter by $current_url)

## Describe alternatives you've considered

Updating every graph in dashboard one-by-one and then reverting them back.

## Additional context

Related to https://github.com/PostHog/posthog/issues/780

Datadog has a decent solution for this: https://docs.datadoghq.com/dashboards/template_variables/, which I think we can simplify and use ourselves.

Came up during #2560 

#### *Thank you* for your feature request – we love each and every one!

posthog/api/test/test_dashboard.py
)
        self.assertEqual(response.json()["creation_mode"], "duplicate")
        
        response = self.client.post(f"/api/projects/{self.team.id}/dashboards/", {"name": "another"})
        self.assertEqual(response.json()["creation_mode"], "default")
    def test_dashboard_duplication(self):
        existing_dashboard = Dashboard.objects.create(team=self.team, name="existing dashboard", created_by=self.user)
        insight1 = Insight.objects.create(filters={"name": "test1"}, team=self.team, last_refresh=now(),)
        DashboardTile.objects.create(dashboard=existing_dashboard, insight=insight1)
        insight2 = Insight.objects.create(filters={"name": "test2"}, team=self.team, last_refresh=now(),)
        DashboardTile.objects.create(dashboard=existing_dashboard, insight=insight2)
        response = self.client.post(
            f"/api/projects/{self.team.id}/dashboards/", {"name": "another", "use_dashboard": existing_dashboard.id}
        )
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.json()["creation_mode"], "duplicate")
        self.assertEqual(len(response.json()["items"]), len(existing_dashboard.insights.all()))
        existing_dashboard_item_id_set = set(map(lambda x: x.id, existing_dashboard.insights.all()))
        response_item_id_set = set(map(lambda x: x.get("id", None), response.json()["items"]))
        
        self.assertTrue(existing_dashboard_item_id_set.isdisjoint(response_item_id_set))
        for item in response.json()["items"]:
            self.assertNotEqual(item.get("dashboard", None), existing_dashboard.pk)
    def test_invalid_dashboard_duplication(self):
        
        response = self.client.post(
            f"/api/projects/{self.team.id}/dashboards/", {"name": "another", "use_dashboard": 12345}
        )
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
    def test_duplication_fail_for_different_team(self):