<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Explain the problem briefly below -->
If a hostvar definition contains another variable, it can be expanded properly normally, but if we first store parent in an intermediate variable and accessed from the there, the variable is no longer expanded. See my full reproducible case below for details. But in short, suppose we have two hostvars:
```
x: 100
y: "{{ x }}"
```
then the following prints out string ``{{ x }}`` instead of `100`:
```
- debug:
    msg: "{{ hostvars_['y'] }}"
  vars:
    hostvars_: "{{ hostvars['the_host_name'] }}"
```

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
core language
vars

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.8.5
  config file = None
  configured module search path = ['/Users/likan/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/2.8.5_1/libexec/lib/python3.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.7.4 (default, Sep  7 2019, 18:27:02) [Clang 10.0.1 (clang-1001.0.46.4)]
```

##### CONFIGURATION
Empty result from `"ansible-config dump --only-changed"`.
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
This is target OS independent.

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->
The minimum case to reproduce only consists of three files:
```paste
[hidden] tree .
.
├── group_vars
│   └── all
├── hosts
└── site.yaml

1 directory, 3 files
```

The host file defines a single host named `h1`. And site.yaml looks like this:
<!--- Paste example playbooks or commands between quotes below -->
```yaml
---

- hosts: all
  tasks:
    - debug:
        msg: "{{ hostvars['h1']['x'] }}"
    - debug:
        msg: "{{ hostvars['h1']['y'] }}"
    - debug:
        msg: "{{ hostvars_['x'] }}"
      vars:
        hostvars_: "{{ hostvars['h1'] }}"
    - debug:
        msg: "{{ hostvars_['y'] }}"
      vars:
        hostvars_: "{{ hostvars['h1'] }}"
```

groups_vars/all content:
```yaml
---

x: 100
y: "{{ x }}"
```

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

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
The last task should also print out 100.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
First three tasks print correct result, but last one are expaneded to string "{{ x }}".

<!--- Paste verbatim command output between quotes -->
```paste below
[hidden] ansible-playbook --ask-pass -u root -i hosts site.yaml
SSH password:

PLAY [all] *****************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************
ok: [h1]

TASK [debug] ***************************************************************************************************************************************************************************************************
ok: [h1] => {
    "msg": "100"
}

TASK [debug] ***************************************************************************************************************************************************************************************************
ok: [h1] => {
    "msg": "100"
}

TASK [debug] ***************************************************************************************************************************************************************************************************
ok: [h1] => {
    "msg": "100"
}

TASK [debug] ***************************************************************************************************************************************************************************************************
ok: [h1] => {
    "msg": "{{ x }}"
}

PLAY RECAP *****************************************************************************************************************************************************************************************************
h1                         : ok=5    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```

''' A special view of vars_cache that adds values from the inventory when needed. '''
    def __init__(self, inventory, variable_manager, loader):
        self._lookup = dict()
        self._inventory = inventory
        self._loader = loader
        self._variable_manager = variable_manager
        variable_manager._hostvars = self
    def set_variable_manager(self, variable_manager):
        self._variable_manager = variable_manager
        variable_manager._hostvars = self
    def set_inventory(self, inventory):
        self._inventory = inventory
    def _find_host(self, host_name):
        
        return self._inventory.get_host(host_name)
    def raw_get(self, host_name):
        '''
        Similar to __getitem__, however the returned data is not run through
        the templating engine to expand variables in the hostvars.
        '''
        host = self._find_host(host_name)
        if host is None:
            return Undefined(name="hostvars['%s']" % host_name)
        return self._variable_manager.get_vars(host=host, include_hostvars=False)
    def __getitem__(self, host_name):