## Bug description

strtobool is used in several places where it will cause deprecation warning in Pythin 3.10 and error in Python 3.12 since distutils will be removed in Python 3.12 .

Reference : https://www.python.org/dev/peps/pep-0632/

```
rg distutils                     
posthog/api/annotation.py
1:from distutils.util import strtobool

posthog/api/dashboard.py
2:from distutils.util import strtobool

posthog/api/insight.py
1:from distutils.util import strtobool

posthog/models/filters/mixins/common.py
4:from distutils.util import strtobool

posthog/settings.py
17:from distutils.util import strtobool
```

## Expected behavior

It's a good idea to vendor in the function as it's a short one.

## Environment

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


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

posthog/models/filters/mixins/common.py
@cached_property
    def breakdown_type(self) -> Optional[str]:
        return self._data.get(BREAKDOWN_TYPE, None)
    @include_dict
    def breakdown_type_to_dict(self):
        return {"breakdown_type": self.breakdown_type} if self.breakdown_type else {}
class BreakdownValueMixin(BaseParamMixin):
    @cached_property
    def breakdown_value(self) -> Optional[str]:
        return self._data.get(BREAKDOWN_VALUE, None)
    @include_dict
    def breakdown_value_to_dict(self):
        return {"breakdown_value": self.breakdown_value} if self.breakdown_value else {}
class InsightMixin(BaseParamMixin):
    @cached_property
    def insight(self) -> str:
        return self._data.get(INSIGHT, INSIGHT_TRENDS)
    @include_dict
    def insight_to_dict(self):
        return {"insight": self.insight} if self.insight else {}
class DisplayDerivedMixin(InsightMixin):
    @cached_property
    def display(self) -> str:
        return self._data.get(DISPLAY, INSIGHT_TO_DISPLAY[self.insight])
    @include_dict
    def display_to_dict(self):
        return {"display": self.display} if self.display else {}
class SessionMixin(BaseParamMixin):