handle font face, slant, and weight properly

The idea is that the font face, weight, and slant must all be
set *simultaneously* with a call to `selectFontFace`.  When flattening
with `prims`, we would get all the attributes collected in one place
at a leaf; however, now that we are processing a tree, it won't do to
call `selectFontFace` again every time we see a `Style`.  Instead we
must collect up font attributes as we traverse the tree and
only call `selectFontFace` when actually rendering a text primitive.

Note that something similar also showed up before with fill and line
color: cairo only has a single "source color" so we can't simply set
the fill or stroke color as soon as we encounter the corresponding
attribute.