made the Typesetter lazier

- the text & dimensions now get set via properties rather than a
one-shot constructor
- the layout will only be invalidated if either of those values
actually changes (i.e., re-assignments are ignored)