add type information to RenderedTrees (Fixes #106)

use a single case class for RenderedTrees (but with alias constructors Terminal and NonTerminal)

nodeTypes for Workflow trees

nodeTypes for LogicalPlan (and annotated forms)

nodeType for None

nodeTypes for AST annotations

handle the umpteen AST node types in RenderTree instance
Not exactly.

In some cases, the "label" is just the last part of the type (example: `Workflow/PipelineOp/Project` -> `Project`).

In other cases, the "label" is that, plus something based on the value of the specific instance (example: `LogicalPlan/Free` -> `Free('tmp0)`).

But in a case like that a graphical representation might want to interpret the type `Free`, use a particular font/color, and use simply `'tmp0` as the textual label.

That's what I was getting at with the whole type/label distinction. The `label`, if present, is something you really need to show because it's unique to the node, whereas the `type` is from a small fixed set of types and could be just a hint to the renderer. But in the console where all you have is text, showing both seems to make sense.

I think this is worth getting right, but until we actually have a renderer using it, it's going to be a bit speculative.