Add MutVisitor and implement macro system