## Bug description

Currently, decide endpoint takes 10+ seconds on kea.js.org.

This means that for first-time visitors autocapture nor session recording will be turned on for that long - losing valuable information.

When measuring this yesterday via shell ([slack thread](https://posthog.slack.com/archives/C0113360FFV/p1604951621008400)), the culprit was feature flags cohort checking. In this case, the cohort user was checked against was defined against the following action:

![Screenshot from 2020-11-10 11-41-32](https://user-images.githubusercontent.com/148820/98657215-49582e80-234a-11eb-9669-37d55e0d23bd.png)

Which currently looks through events of the data for that team.

## Expected behavior

Decide endpoint should use cached/materialized cohort ownership rather than calculating it on the fly.

## How to reproduce

1. Create an action with some selector
2. Create a cohort for has done action at any point
3. Create a feature flag using the cohort.
4. Measure /decide endpoint latency

## Environment

Cloud 

## Additional context

cc @EDsCODE who made it not time out by https://github.com/PostHog/posthog/pull/2299

#### *Thank you* for your bug report – we love squashing them!
posthog/models/feature_flag.py
return (
            Person.objects.filter(team_id=self.team_id, persondistinctid__distinct_id=distinct_id)
            .filter(Filter(data=self.filters).properties_to_Q(team_id=self.team_id, is_person_query=True))
            .exists()
        )
    def _query_clickhouse(self, distinct_id: str) -> bool:
        from ee.clickhouse.models.person import get_person_by_distinct_id
        return len(get_person_by_distinct_id(self.team, distinct_id, Filter(data=self.filters))) > 0
    def _match_distinct_id(self, distinct_id: str) -> bool:
        if check_ee_enabled():
            return self._query_clickhouse(distinct_id)
        return self._query_postgres(distinct_id)
    def distinct_id_matches(self, distinct_id: str) -> bool:
        if len(self.filters.get("properties", [])) > 0:
            if not self._match_distinct_id(distinct_id):
                return False
            elif not self.rollout_percentage:
                return True
        if self.rollout_percentage:
            hash = self._hash(self.key, distinct_id)
            if hash <= (self.rollout_percentage / 100):
                return True
        return False
    
    
    
    
    def _hash(self, key: str, distinct_id: str) -> float: