##### SUMMARY
The collection loader currently imports a number of things from Ansible, the heaviest of which is config/constants. This makes it heavyweight and somewhat dangerous for ansible-test and unit tests to use. Refactor it to minimize those imports and supply the necessary impls another way (constructor, DI pattern, etc).

##### ISSUE TYPE
- Feature Idea

##### COMPONENT NAME
AnsibleCollectionLoader

##### ADDITIONAL INFORMATION

full_name = '.'.join([self.package, name])
        if full_name in sys.modules:
            
            return sys.modules[full_name]
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", RuntimeWarning)
            if imp is None:
                spec = importlib.util.spec_from_file_location(to_native(full_name), to_native(path))
                module = importlib.util.module_from_spec(spec)
                spec.loader.exec_module(module)
                sys.modules[full_name] = module
            else:
                with open(to_bytes(path), 'rb') as module_file:
                    
                    module = imp.load_source(to_native(full_name), to_native(path), module_file)
        return module
    def _update_object(self, obj, name, path):
        
        setattr(obj, '_original_path', path)
        setattr(obj, '_load_name', name)
    def get(self, name, *args, **kwargs):
        ''' instantiates a plugin of the given name using arguments '''
        found_in_cache = True
        class_only = kwargs.pop('class_only', False)
        collection_list = kwargs.pop('collection_list', None)
        if name in self.aliases:
            name = self.aliases[name]
        path = self.find_plugin(name, collection_list=collection_list)
        if path is None: