Refactor task proxy

Remove task proxy class generation logic. Move `cylc.task_types.task` module to
`cylc.task_proxy` and rename the `task` class as `TaskProxy`. Each task proxy
is no longer its own class, but they all belong to the `TaskProxy` class.
The task definition is now an attribute of a `TaskProxy` object.

The `PollTimer` class is moved out of `cylc.task_types.task` into its own module
`cylc.poll_timer`.

The logic to install the suite contact file is moved to its own module
`cylc.job_host`.

Allow `-`, `+`, `%`, and `@` characters as task names. `cylc.TaskID` module
is renamed `cylc.task_id`. Task ID logic is consolidated here.

Reduce memory footprint.
Memory size of main process is reduced by 7-8% in various tests.

More pep8 and pylint fixes.
```taskd.modifiers``` used to hold the the list of class names used to derive the task proxy class by multiple inheritance.  I guess you're just recycling it to hold a few flags that affect behaviour of the new task proxy class. There's so few of these now that the use of a special container for them is probably not necessary. (no big deal either way though).