## Bug description

Support refreshing all dashboard items. This feature was temporarily removed because it wasn't working properly)

## Expected behavior
- All dashboard items should be properly refreshed and the `items` object in the `dashboardLogic` should contain the latest information.
- From user feedback. I expect items to be automatically refreshed every hour or so (e.g. if I'm a marketer that looks at graphs continuously during the day, or have a screen dedicated just to metrics).


## How to reproduce

1. Create a dashboard with multiple items
2. Attempt to refresh all and check the last refresh timestamp for each item (remember to uncomment relevant code)

## Environment

- [X] PostHog Cloud
- [X] self-hosted PostHog, version/commit: _please provide_

## Additional context
Follow-up to #3363

## Technical context

When refreshing all dashboard items (via `refreshAllDashboardItems()`) not all items are consistently refreshed all the time. Tested for instance with a dashboard with a couple of mixed (different type) graphs. Some items are still kept on "last refreshed 10 minutes ago".

In addition to the above, as originally reported on #3608, when calling `refreshAllDashboardItems` we update each item in their own scope, which means that the general `items` object in the upper scope logic (`dashboardLogic.js`) doesn't get updated. Not sure if we should propagate the change upwards, re-fetch everything, or just do a general refresh.

The UX problem this is causing is that the "Last refreshed" label now introduced in the dashboards gets outdated because `items` doesn't get updated. Having this object with outdated information also leads to other confusing UX issues.


#### *Thank you* for your bug report – we love squashing them!

posthog/api/test/test_dashboard.py
dashboard = Dashboard.objects.create(name="Default", pinned=True, team=self.team, filters={"date_from": "-14d"})
        self.client.post(
            "/api/dashboard_item/",
            {"filters": {"hello": "test", "date_from": "-7d"}, "dashboard": dashboard.pk, "name": "some_item"},
            format="json",
        )
        response = self.client.get("/api/dashboard/{}/".format(dashboard.pk)).json()
        self.assertEqual(len(response["items"]), 1)
        self.assertEqual(response["items"][0]["name"], "some_item")
        self.assertEqual(response["items"][0]["filters"]["date_from"], "-14d")
        item_response = self.client.get("/api/dashboard_item/").json()
        self.assertEqual(item_response["results"][0]["name"], "some_item")
        
        self.client.patch("/api/dashboard_item/{}/".format(item_response["results"][0]["id"]), {"deleted": "true"})
        items_response = self.client.get("/api/dashboard_item/").json()
        self.assertEqual(len(items_response["results"]), 0)
    def test_dashboard_items_history_per_user(self):
        test_user = User.objects.create_and_join(self.organization, "test@test.com", None)
        DashboardItem.objects.create(filters={"hello": "test"}, team=self.team, created_by=test_user)
        
        self.client.post("/api/dashboard_item", {"filters": {"hello": "test"}}, format="json").json()
        response = self.client.get("/api/dashboard_item/?user=true").json()
        self.assertEqual(response["count"], 1)
    def test_dashboard_items_history_saved(self):
        self.client.post("/api/dashboard_item/", {"filters": {"hello": "test"}, "saved": True}, format="json").json()
        self.client.post("/api/dashboard_item/", {"filters": {"hello": "test"}}, format="json").json()
        response = self.client.get("/api/dashboard_item/?user=true&saved=true").json()
        self.assertEqual(response["count"], 1)
    def test_dashboard_item_layout(self):