##### SUMMARY

In several comments on this PR, it was noted that the 2.8.x apt package facts has a large performance regression: https://github.com/ansible/ansible/pull/56008#issuecomment-496931379

The reported difference is about 1m30s  vs 8s for a fixed version.

Looking at the fixed version versus 2.8x and devel code, it looks like the issue is that creating an empty apt package cache takes a measurable amount of time.  Doing that in a loop for each package adds up significantly.  This can be fixed by reusing the empty cache rather than recreating a new one every single time.  I asked for people to test with the following change and they report that it fixes the problem:
``` patch
     @property
     def pkg_cache(self):
-        if self._cache:
+        if self._cache is not None:
             return self._cache
 
         self._cache = self._lib.Cache()
         return self._cache
```

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
package_facts.py

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
2.8.x devel
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
N/A
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
An Ubuntu or Debian managed machine

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
```yaml

```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
Package facts gathered in under 10s

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
Package facts gathered in over a minute.

rc, out, err = module.run_command([self._cli, 'query', "%%%s" % '\t%'.join(['n', 'v', 'R', 't', 'a', 'q', 'o', 'p', 'V'])])
        if rc != 0 or err:
            raise Exception("Unable to list packages rc=%s : %s" % (rc, err))
        return out.splitlines()
    def get_package_details(self, package):
        pkg = dict(zip(self.atoms, package.split('\t')))
        if 'arch' in pkg:
            try:
                pkg['arch'] = pkg['arch'].split(':')[2]
            except IndexError:
                pass
        if 'automatic' in pkg:
            pkg['automatic'] = bool(pkg['automatic'])
        if 'category' in pkg:
            pkg['category'] = pkg['category'].split('/', 1)[0]
        if 'version' in pkg:
            if ',' in pkg['version']:
                pkg['version'], pkg['port_epoch'] = pkg['version'].split(',', 1)
            else:
                pkg['port_epoch'] = 0
            if '_' in pkg['version']:
                pkg['version'], pkg['revision'] = pkg['version'].split('_', 1)
            else:
                pkg['revision'] = '0'
        if 'vital' in pkg:
            pkg['vital'] = bool(pkg['vital'])
        return pkg
class PORTAGE(CLIMgr):