public static XObject Accept(this XObject node, XObjectVisitor visitor)
    {
        CheckNullReference(node);
        CheckArgumentNull(visitor, "visitor");

        // yay, easy dynamic dispatch
        Acceptor acceptor = new Acceptor(node as dynamic);

        return(acceptor.Accept(visitor));
    }