**Use case**
Manually modify the contents of ZooKeeper.
Not for normal usage scenarios... mostly for operations engineers.

**Describe the solution you'd like**

Allow INSERT. It should contain only subset of the columns, because some of the columns in `system.zookeeper` table (like numChildren, ctime, etc...) cannot be specified explicitly.

INSERT will perform multiple create operations.

Add a setting to perform set operations (update existing nodes) instead of creating new nodes.

**Additional context**

Also it will be nice to allow "full scan" queries to `system.zookeeper` table to quickly creating dumps.
It can be filtered by condition on prefix of path.

auto evaluated = evaluateConstantExpressionAsLiteral(value, context);
            const auto * literal = evaluated->as<ASTLiteral>();
            if (!literal)
                return false;
            if (String str; literal->value.tryGet(str))
            {
                res.emplace_back(str, ZkPathType::Exact);
            }
            else if (Tuple tuple; literal->value.tryGet(tuple))
            {
                for (auto element : tuple)
                    res.emplace_back(element.safeGet<String>(), ZkPathType::Exact);
            }
            else
                return false;
        }
        return true;
    }
    else if (function->name == "equals")
    {
        const ASTIdentifier * ident;
        ASTPtr value;
        if ((ident = args.children.at(0)->as<ASTIdentifier>()))
            value = args.children.at(1);
        else if ((ident = args.children.at(1)->as<ASTIdentifier>()))
            value = args.children.at(0);
        else
            return false;
        if (ident->name() != "path")
            return false;