Flatten the routing DSL spec.

This follows from how the DSL language is implemented, in having each DSL
method run on the same object which has some internal state.  So here, we
also keep some state (the current namespace) in that object, and only have
one dsl declaration for the entry point (draw).  In DSLs where different
methods are run on different objects, then each place where a new object
is introduced would have a dsl spec.