(maint) Move methods for creating downloaders to factory
Previously, the plugin_handler module was responsible for creating
downloaders and evaluating them. Since all of this happens within a
single method it is hard to test that the downloaders are created with
the correct set of properties. For example, we ignore source
permissions when downloading plugins, but we use source permissions
when downloading external facts, since those often contain scripts,
which must be executable.
This commit moves the logic for creating the downloaders to a factory
and updates the tests accordingly. As part of this change, the
PluginHandler module is changed to a class and is no longer mixed into
the Configurer.