##### 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

module = __import__(self.package, fromlist=[self.base_class])
                
                try:
                    plugin_class = getattr(module, self.base_class)
                except AttributeError:
                    continue
                if not issubclass(obj, plugin_class):
                    continue
            self._display_plugin_load(self.class_name, basename, self._searched_paths, path, found_in_cache=found_in_cache, class_only=class_only)
            if not class_only:
                try:
                    obj = obj(*args, **kwargs)
                except TypeError as e:
                    display.warning("Skipping plugin (%s) as it seems to be incomplete: %s" % (path, to_text(e)))
            self._update_object(obj, basename, path)
            yield obj
class Jinja2Loader(PluginLoader):
    """
    PluginLoader optimized for Jinja2 plugins
    The filter and test plugins are Jinja2 plugins encapsulated inside of our plugin format.
    The way the calling code is setup, we need to do a few things differently in the all() method
    """
    def find_plugin(self, name, collection_list=None):
        
        
        if '.' in name:
            return super(Jinja2Loader, self).find_plugin(name, collection_list=collection_list)
        raise AnsibleError('No code should call find_plugin for Jinja2Loaders (Not implemented)')
    def get(self, name, *args, **kwargs):