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.
(It is really unfortunate that `id` is a Python built-in function.)

I'll change it to `identity`. (Otherwise, `pylint` will complain about upper case being reserved for constants.)