Refactor completion extension to separate concerns

The CobraCompletionTextEditorExtension class should be responsible for providing
completion data based on the AST from the parsed document.  It doesn't parse the
document itself, at least not to generate an AST, so it should also not generate
the completion data lists for the nodes.  Basically, it should just coordinate
between whatever mechanism creates the AST and whatever mechanism creates the
completion data and data lists.

The TypeSystem.Parser already creates the AST.  This commit introduces the
notion of a Completion.DataFactory and a variety of supporting classes such as:
Completion.Icons
Completion.NamedNodeData
Completion.BoxMembersList
etc.

The idea is that this will make the CobraCompletionTextEditorExtension a little
more light-weight to make it easier to handle more semantic cases without
becoming a gigantic do-everything class.