Cache client objects in reactor.

If you have a lot of events the current system of loading all clients on each event doesn't work-- because it loads all runners (for example).
Typo!
Change variable names
Move cached ttl dict to its own util class
Pylint syle cleanup
rename the cache object
Move to a class variable (and rename)
Merge pull request #10851 from jacksontj/reactorperf

Cache client objects in reactor.