separate plugins into discrete commands

Separate plugin types by directory and commands by individual scripts. Support for a command is determined by the presence of a script with an appropriate name. Unfortunately, only a prefix can be used, since extensions are necessary on some platforms.
I prefer either giving these arguments variable names, using named arguments when we pass them in. Your call, but the following is shorter and in my opinion easier to read.

    fields, args = parse_plugin_args(required_fields={'path'},
                                     optional_fields=set())
    dest, cache_path = args