Further refactor to the job submission logic

Decouple the task, job submit and job file modules.

Turn `JobFile` into a singleton. Move `cylc.job_submission.jobfile` module up a
level to become `cylc.job_file`. Use a single dict to pass information to the
`write` method for a much cleaner interface.

Rename `cylc.job_submission` package `cylc.job_sys_handlers`. (It is no longer
just about job submission, but also other interaction with the job systems.)

Turn instances of job system handler classes into state-less classes so they
can be instantiated with minimal efforts.

Job system handler classes are no longer sub-classes of `JobSubmit`. This
allows their interfaces to be much more flexible.

Rename `JobSubmit` to `JobSysManager`. Turn into a singleton. Manage instances
of job system handlers (so there is no need to create new instances
unnecessarily). Move most job systems related logic into this class. Move
`cylc.job_submission.job_submit` module up a level to become
`cylc.job_sys_manager`.

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

10/10 pylint scores for the job file and the job system handler modules!