Further refactor to the job submission logic

Decouple the task, job submit and job file modules.

Turn job file write into a function.
Use a single dict to pass information to the job file writing function.

Turn instances of job submission method classes into state-less classes so they
can be instantiated much more easily.

Allow job submission method classes to directly format the directives. This
allows each class to have full control of what goes into the job file.

Job submission method classes are no longer sub-classes of `JobSubmit`. This
allows `JobSubmit` to act as a functional manager class.

A 10/10 pylint score for the job file module!