##### SUMMARY
Since `add_host` and `group_by` actions only modify the runtime inventory, hosts/groups/vars added by them don't survive a `meta: refresh_inventory` call (since that call completely clears the runtime inventory). 

##### ISSUE TYPE
- Feature Idea

##### COMPONENT NAME
InventoryManager

##### ADDITIONAL INFORMATION
After some internal discussion, the general consensus seemed to be that this behavior is an undesirable default. The `add_host` and `group_by` actions should manage a more persistent state independent of the runtime inventory, then apply their changes to the running inventory. When a `meta: refresh_inventory` occurs, the normal dynamic inventory clear/refresh should happen, then reapply the add_host/group_by state. This should probably be the default behavior, but a config switch or a different `meta` action (or an arg to it) to emulate the current behavior could also be created if necessary.

self._tqm.send_callback('v2_runner_on_ok', task_result)
            
            if original_task.register:
                host_list = self.get_task_hosts(iterator, original_host, original_task)
                clean_copy = strip_internal_keys(module_response_deepcopy(task_result._result))
                if 'invocation' in clean_copy:
                    del clean_copy['invocation']
                for target_host in host_list:
                    self._variable_manager.set_nonpersistent_facts(target_host, {original_task.register: clean_copy})
            if do_handlers:
                self._pending_handler_results -= 1
            else:
                self._pending_results -= 1
            if original_host.name in self._blocked_hosts:
                del self._blocked_hosts[original_host.name]
            
            
            if original_task._role is not None and role_ran:  
                
                
                for (entry, role_obj) in iterator._play.ROLE_CACHE[original_task._role.get_name()].items():
                    if role_obj._uuid == original_task._role._uuid:
                        role_obj._had_task_run[original_host.name] = True
            ret_results.append(task_result)
            if one_pass or max_passes is not None and (cur_pass + 1) >= max_passes:
                break
            cur_pass += 1
        return ret_results
    def _wait_on_handler_results(self, iterator, handler, notified_hosts):