Lay the ground work for abstracting tool XML parsing out of galaxy.tools.Tool.

First part of a long process - this handles outlining a couple parsers and setting everything up to pass the parser into Tool.

Long term this should allow us to support (in core - if not the whole ecosystem) - multiple tooling formats (YAML, CWL, etc...). But it is also important from a purely design perspective - this core logic class should not be doing XML parsing.

As part of this I am building a test YAML tool description - but it cannot yet be loaded by Galaxy and should not be considered part of Galaxy's interface - it is there just to test two implementations are possible - obviously a broader design discussion would need to happen before we support a new YAML tool format going forward.
force_history_refresh does nothing so I am just setting it False in tool.

(TODO: Update planemo linter to mark this as a problem.)
REbase into initial commit.
Parse name, id, and version using tool source abstraction...

instead of XML directly.
Tools: Parse is_multi_byte from tool_source instead of from XML directly.
Tools: Parse display_interface from tool_source instead of XML directly.
Tools: Reduce code duplication in XmlToolSource.
Rebase into is_multi_byte commit.
Tools: Parse require_login from tool_source instead of from XML directly.
Tools: Refactor request parameter translation for new tool_source abstraction.

Interface itself relies on producing an XML element still - but it is optional - so we don't need to modify the interface until we want to allow data sources to be non-XML (less interesting than tools more generally I suppose).
Tools: Parse command and interpreter from tool_source instead of XML directly.
Tools: Refactor url redirection params parsing to be optional in coming from tool_source.
Tools: Parse descriptions from tool_source instead of using XML directly.
Tools: Parse runtime version command stuff from tool_source instead of XML directly.
Tools: Parse parallelism information from tool_source instead of XML directly.
Tools: Parse 'hidden' from tool_source instead of XML directly.
Tool: Refactor code and hook parsing so tool_sources without XML roots don't crash.

Not migrating these features to YAML yet - I think they are all deprecated.
Tool: Refactor custom options handling to be optional.

Need to figure out if still useful and migrate into ToolSource interface if it is.