Format failures via a static method

To allow for customized formatting of failures create and
use a tiny helper function that can be used to alter how
failures are formatted to better suite the users needs.

This allows for users to dervive from the top level class and
adjust there formatting for how they see fit (as long as they
return the same two values that the methods api defines).

Change-Id: Ib91bd28ff4f24d831bb97715282ee8f3b6050c4c
Tweaks to setup.cfg

Add in 3.4 classifier (and adjust spacing of the
classifier section) since 3.4 support will be maintained
ongoing in the future.

Adjusts the keywords to be a smaller list of comma
separated values that summarize what taskflow is all
about.

Adds python2.6 as a minimum version so that it is well
understood (it was already implied) what the minimum
python version we currently support is.

Hopefully this adjustment fixes bug 1323731

Change-Id: Ia20120b3e4064fb315ddcf018588f3af4e503d1e
Move scheduler and completer classes to there own modules

To allow other components to more easily import these modules
without causing circular imports split these two classes into
there own modules so that they can be referenced as/where
needed in the future.

Change-Id: I9cf1fd1dd133be58ef521a8911d1740f1daa9950
Use a metaclass to dynamically add testcases to example runner

Instead of using a custom update() mechanism just take advantage
of a metaclass that can dynamically add our desired test functions
on in a more pythonic manner.

Change-Id: I8f4940f85dd7b5255c181795606ac76ca5605baa
Include documentation of the utility modules

Add a documentation section that uses the automodule
sphinx documentation generator to build a utility page
that shows people what the utility modules taskflow
uses for *internal* usage are and include a warning to
try to avoid end-users from using these modules (better
to warn than not warn).

This also adds on docstrings to various functions that
were missing it so that they appear correctly in the
generated documentation.

Change-Id: Ibd5695927601614f31793ea5450887694f4320ae
Avoid deepcopying exception values

Since failure objects are by design meant to be
immutable we don't/shouldn't need to deepcopy
the exception value; so instead just do a shallow
copy and depend on the semantics that failure
objects are immutable to avoid any subsequent issues
here.

Change-Id: Id1f9ae04b330ab8c16ab2f7d1e877032639f1cb3
Add link to issue 17911

The ongoing development in upstream python may
produce a useful class that we can use in the future
to reduce this objects code; so this adds a link to
that for future reference.

Change-Id: I86baa096e113cccbb4915ad4fd6fb8cc0313e0a0
Merge "Tweaks to setup.cfg"
Merge "Include documentation of the utility modules"
Merge "Format failures via a static method"
Merge "Add link to issue 17911"
Merge "Avoid deepcopying exception values"
Merge "Use a metaclass to dynamically add testcases to example runner"
Merge "Move scheduler and completer classes to there own modules"