##### 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.
def _compose(self, template, variables):
        ''' helper method for plugins to compose variables for Ansible based on jinja2 expression and inventory vars'''
        t = self.templar
        t.available_variables = variables
        return t.template('%s%s%s' % (t.environment.variable_start_string, template, t.environment.variable_end_string), disable_lookups=True)
    def _set_composite_vars(self, compose, variables, host, strict=False):
        ''' loops over compose entries to create vars for hosts '''
        if compose and isinstance(compose, dict):
            for varname in compose:
                try:
                    composite = self._compose(compose[varname], variables)
                except Exception as e:
                    if strict:
                        raise AnsibleError("Could not set %s for host %s: %s" % (varname, host, to_native(e)))
                    continue
                self.inventory.set_variable(host, varname, composite)
    def _add_host_to_composed_groups(self, groups, variables, host, strict=False):