Refactor the dsl to look more hy like

Replace visitor with defvisitor and make everything resemble a sort of
defn form