Abstract tool lineage handling out of ToolBox.

Start work on infrastructure to support tool lineages not defined within the tool shed install model.
Helper methods on ToolBox to abstract away lineage details.

Reduces code duplication slightly and simplifies __add_tool_to_tool_panel (cyclomatic complexity reduced from 20 to 14).
Higher-level abstraction in ToolBox for comparing versions.
Introduce ToolPanel abtraction.

There are some repeated operations on an odict in Toolbox that could be cleaned up (fewer lines of code, more readable) with new abstraction in place. Starting with __add_tool_to_tool_panel but will work its way to other methods in Toolbox eventually.

Abstraction reduces cyclomatic complexity of Toolbox.__add_tool_to_tool_panel from 23 down to 18.
Move more logic into ToolSectionElements, raising level abstraction in Toolbox.
Replace another repeated idiom in Toolbox with higher level method in toolbox.panel.
Improved unit testing support for unit tests.
Update ToolBox tool registration to support multiple tool versions per id.
WIP: Tool Lineage Enhancements.
Rework ToolBox to use lineage.get_versions.
Fix lineages.factory for stock lineage.
Fix toollineageversion.
Fix stock tool versions.
Cleaner stock.py.
More fixes and tests for stock lineage and ToolBox handling.
Bugfix versions when loading everything in.
Functional testin for running tools with multiple versions.

(Using stock lineage - not tool shed lineage.)
Fix for somewhere.
Fixes.