reworked the font system

- font() and fonts() now work with font families rather than postscript
names of single weights
- added Typeface class with context manager support. allows for
creating a stock of fonts and limiting their scope to blocks
- font() updates the canvas state and returns a Typeface object (to
support the with-statement). the new typeface() command takes the same
args and just returns the object (without affecting global state).