Allow the worker banner to be written to an arbitrary location

Instead of always writing the worker startup banner to LOG.info
make it so that a callback can be provided that will receive the
worker banner and can write it to a desired location that the
callback specifies (or drop it completely). This is useful for those
who use workers but have an alternate location they desire the
banner to go (for example some arbitrary stream).

Change-Id: I61a4b7e9dd33ee06137caaed33153f5b3fbeb661
Change messaging from handler connection timeouts -> operation timeouts

Instead of having the exception message say the issue is a connection
timeout (which it may not be if the operation just takes a long time
to finish...) change the message to denote that its an operation time
out instead.

Change-Id: Icf20e88ca6b23719b19d98298d7869c783f32f52
Improve some of the task docstrings

Change-Id: I72283d8043f66eb1de6af38b7fa17b261ab7fae8
Use standard threading locks in the cache types

Instead of using a reader/writer lock in the cache types
just take advantage of the fact that single, non-mutating
operations on dictionaries are thread-safe in python.

This means we can remove the need to have simple read-only
operations using read-locks and can just use a simpler lock
around write-operations or around read/write operations that
span multiple dictionary operations (like iteration).

Change-Id: I4679275d7fe25fac12a6b05e8aa38da95649f4f6
Split the scheduler into sub-schedulers

Instead of having a larger scheduler class that contains
logic for both the retry routine and the task routine split
this into two classes and have the scheduler class use those
sub-schedulers for internal scheduling.

Change-Id: I6309a5fd172d5b20a01a2ba8b3e4cf8512d085fb
Cache immutable visible scopes in the runtime component

Instead of recalculating/rewalking over the visible scopes
of atoms just calculate the scope once and cache it (as it
currently does not change at runtime) and return the cached
tuple instead to avoid the needless recreation whenever a
scope is requested for a given atom.

Change-Id: I47d24054c63e8620d26e7ade4baa239295daed0a
Merge "Cache immutable visible scopes in the runtime component"
Merge "Split the scheduler into sub-schedulers"
Merge "Use standard threading locks in the cache types"
Merge "Change messaging from handler connection timeouts -> operation timeouts"
Merge "Allow the worker banner to be written to an arbitrary location"
Merge "Improve some of the task docstrings"