This function creates the arguments with which to call the `DXExecutable.run` method (or the `DXExecutable._get_run_input` method which does everything that `run` does except make the API call); it translates workflow-specific things into key/values into `kwargs['extra_args']` (and removes the affected keys) so that methods in `DXExecutable` will do the right thing with the rest of it.

I left `_get_run_input` as a private method so far because I'm not sure it's generally useful, but I am calling it directly in `dx` now to create the input to the /workflow-xxxx/dryRun API method.

If you have ideas as to how to improve the interfaces, please let me know.  I was trying to keep the common logic in `DXExecutable` where possible to avoid having the lists of arguments and argument-parsing logic duplicated in multiple classes, and this is the best I've come up with so far.