##### SUMMARY
Setting `cache_timeout: 0` in an inventory plugin configuration has no effect.  The default value is used instead.
##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
`lib/ansible/plugins/inventory/__init__.py`
##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.10.0b1.post0
  config file = /export/home/orion-admin/ansible-boulder/ansible.cfg
  configured module search path = [u'/export/home/orion-admin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /export/home/orion-admin/ansible/lib/ansible
  executable location = /export/home/orion-admin/ansible/bin/ansible
  python version = 2.7.5 (default, Apr  1 2020, 10:09:19) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
```
also with ansible 2.9.10
##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
ANSIBLE_PIPELINING(/export/home/orion-admin/ansible-boulder/ansible.cfg) = True
ANSIBLE_SSH_ARGS(/export/home/orion-admin/ansible-boulder/ansible.cfg) = -C -o ControlMaster=auto -o ControlPersist=60s -o ForwardX11=no -o ForwardAgent=no
DEFAULT_BECOME(/export/home/orion-admin/ansible-boulder/ansible.cfg) = True
DEFAULT_CALLBACK_WHITELIST(/export/home/orion-admin/ansible-boulder/ansible.cfg) = [u'profile_tasks']
DEFAULT_FORKS(/export/home/orion-admin/ansible-boulder/ansible.cfg) = 25
DEFAULT_GATHERING(/export/home/orion-admin/ansible-boulder/ansible.cfg) = smart
DEFAULT_HOST_LIST(/export/home/orion-admin/ansible-boulder/ansible.cfg) = [u'/export/home/orion-admin/ansible-boulder/inventory']
DEFAULT_INVENTORY_PLUGIN_PATH(/export/home/orion-admin/ansible-boulder/ansible.cfg) = [u'/export/home/orion-admin/ansible-boulder/plugins/inventory']
DEFAULT_JINJA2_EXTENSIONS(/export/home/orion-admin/ansible-boulder/ansible.cfg) = jinja2.ext.do
DEFAULT_ROLES_PATH(/export/home/orion-admin/ansible-boulder/ansible.cfg) = [u'/export/home/orion-admin/ansible-boulder/roles']
DEFAULT_TIMEOUT(/export/home/orion-admin/ansible-boulder/ansible.cfg) = 20
INJECT_FACTS_AS_VARS(/export/home/orion-admin/ansible-boulder/ansible.cfg) = True
INVENTORY_ENABLED(/export/home/orion-admin/ansible-boulder/ansible.cfg) = [u'cobbler', u'ini']
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
EL 7.8.
python 2.7.5

##### STEPS TO REPRODUCE

Use a caching inventory plugin (I'm testing with cobbler - https://github.com/ansible-collections/community.general/pull/627) and set cache_timeout to 0.  Observe that it instead uses the default value.
##### EXPECTED RESULTS
cache plugin _timeout is set to 0


The issue is the following two code segments:
https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/inventory/__init__.py#L235
```
        if 'cache' in self._options and self.get_option('cache'):
            cache_option_keys = [('_uri', 'cache_connection'), ('_timeout', 'cache_timeout'), ('_prefix', 'cache_prefix')]
            cache_options = dict((opt[0], self.get_option(opt[1])) for opt in cache_option_keys if self.get_option(opt[1]))
            self._cache = get_cache_plugin(self.get_option('cache_plugin'), **cache_options)
```
and https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/inventory/__init__.py#L323 
```
        cache_option_keys = [('_uri', 'cache_connection'), ('_timeout', 'cache_timeout'), ('_prefix', 'cache_prefix')]
        cache_options = dict((opt[0], self.get_option(opt[1])) for opt in cache_option_keys if self.get_option(opt[1]))
```
if `self.get_option(opt[1])` evaluates to `false`, which a value of `0` for `cache_timeout` does, then the option value is not passed on to cache_options.
""" Parses a File based Inventory Source"""
    TYPE = 'storage'
    def __init__(self):
        super(BaseFileInventoryPlugin, self).__init__()
class DeprecatedCache(object):
    def __init__(self, real_cacheable):
        self.real_cacheable = real_cacheable
    def get(self, key):
        display.deprecated('InventoryModule should utilize self._cache as a dict instead of self.cache. '
                           'When expecting a KeyError, use self._cache[key] instead of using self.cache.get(key). '
                           'self._cache is a dictionary and will return a default value instead of raising a KeyError '
                           'when the key does not exist', version='2.12', collection_name='ansible.builtin')
        return self.real_cacheable._cache[key]
    def set(self, key, value):
        display.deprecated('InventoryModule should utilize self._cache as a dict instead of self.cache. '
                           'To set the self._cache dictionary, use self._cache[key] = value instead of self.cache.set(key, value). '
                           'To force update the underlying cache plugin with the contents of self._cache before parse() is complete, '
                           'call self.set_cache_plugin and it will use the self._cache dictionary to update the cache plugin',
                           version='2.12', collection_name='ansible.builtin')
        self.real_cacheable._cache[key] = value
        self.real_cacheable.set_cache_plugin()
    def __getattr__(self, name):
        display.deprecated('InventoryModule should utilize self._cache instead of self.cache',
                           version='2.12', collection_name='ansible.builtin')
        return self.real_cacheable._cache.__getattribute__(name)
class Cacheable(object):