Adding three macros for cleaning up JavaScript interop code.

The "with-protected-context" macro for doing (.save context) and
(.restore context) around a sequence of expressions, providing
something resembling lexical scope to the save/restore pattern for the
canvas rendering context.

The "set-attributes!" macro performs a series of attribute-mutating
operations on a single JS object, cleaning up sequences of set!
expressions.

Finally, the "make-path!" macro wraps a series of path-creation
expressions with (.beginPath context) and (.closePath context),
creating a lexical-scope-style boundary for making paths, with the
caveat that it mutates the context by potentially closing off a
previous path.