Incomplete structural refactoring

Corpus:
  generalizing to different text loading functions
  reordering some of the initialization logic

Gui:
  generalizing name to not be derived from a file but rather a project field
  intialize corpus object with text instead of filename
Decoupled objects dealing with text and images.

TextAsImage now handles all image drawing and word-to-color mapping
Corpus handles importing and collecting stats on text. Those stats are
then used by TextAsImage.

Many TODOs remain after this refactoring but it still (barely) runs.