**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.

for (size_t i = 0; i < pattern.size(); i++)
        {
            char c = pattern[i];
            
            if (c == '\\' && i + 1 < pattern.size())
            {
                char c2 = pattern[i + 1];
                if (c2 == '_' || c2 == '%')
                {
                    prefix.append(1, c2);
                    i++; 
                    continue;
                }
            }
            
            if (c == '_' || c == '%')
            {
                has_metasymbol = true;
                break;
            }
            prefix.append(1, c);
        }
        res.emplace_back(prefix, has_metasymbol ? ZkPathType::Prefix : ZkPathType::Exact);
        return true;
    }
    return false;
}
/** Retrieve from the query a condition of the form `path = 'path'`, from conjunctions in the WHERE clause.
  */
static Paths extractPath(const ASTPtr & query, ContextPtr context, bool allow_unrestricted)