'do' replaces 'with' and implements the stack.

This way there's less awkward syntax to deal with, but we still
get the bonus of stacked (and inherited) states. It also trivially
handles the case of defining external functions to pass to a @do
block.