Eval cleanup

Address a bunch of todos, and better rationalize my object system. In particular, I got rid of evalString, making it so that we just use strings. Now we have an EvalImage class (which is drawable to the svg), and a bunch of children classes. One of those is EvalText, which draws a string with a style. If we call Eval.display with a string or a number, it creates an EvalText and draws that.
Does this get violated during normal user interaction (and e.g. caught + friendly error messaged), or is this more of an `assert` debugging type thing?

I'm a bit wary about this function being responsible for supporting both string types and objects. It might make it harder to refactor later (chasing down all callers and figuring out the types).