Using metaprogramming to provide #on, #emit, and #undo_on in Auto::DSL::Base.