## 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/dashboard.py
if self.get_result(dashboard_item):
            return dashboard_item.last_refresh
        dashboard_item.last_refresh = None
        dashboard_item.save()
        return None
    def to_representation(self, instance):
        representation = super().to_representation(instance)
        representation["filters"] = instance.dashboard_filters(dashboard=self.context.get("dashboard"))
        return representation
class DashboardItemsViewSet(StructuredViewSetMixin, viewsets.ModelViewSet):
    legacy_team_compatibility = True  
    queryset = DashboardItem.objects.all()
    serializer_class = DashboardItemSerializer
    permission_classes = [IsAuthenticated, ProjectMembershipNecessaryPermissions]
    def get_queryset(self) -> QuerySet:
        queryset = super().get_queryset()
        if self.action == "list":
            queryset = queryset.filter(deleted=False)
            queryset = self._filter_request(self.request, queryset)
        order = self.request.GET.get("order", None)
        if order:
            queryset = queryset.order_by(order)
        else:
            queryset = queryset.order_by("order")
        return queryset
    def _filter_request(self, request: Request, queryset: QuerySet) -> QuerySet: