- some copier work needs to be improved

1. clickhouse create destionation table just once if success
2. support settings_push.replication_alter_partitions_sync =1 at attach partition 
3. ...
{
    auto zookeeper = context.getZooKeeper();
    task_description_watch_zookeeper = zookeeper;
    String task_config_str;
    Coordination::Stat stat{};
    Coordination::Error code;
    zookeeper->tryGetWatch(task_description_path, task_config_str, &stat, task_description_watch_callback, &code);
    if (code != Coordination::Error::ZOK)
        throw Exception("Can't get description node " + task_description_path, ErrorCodes::BAD_ARGUMENTS);
    LOG_DEBUG(log, "Loading description, zxid={}", task_description_current_stat.czxid);
    auto config = getConfigurationFromXMLString(task_config_str);
    
    task_cluster->reloadSettings(*config);
    context.setSettings(task_cluster->settings_common);
    task_cluster_current_config = config;
    task_description_current_stat = stat;
}
void ClusterCopier::updateConfigIfNeeded()
{
    UInt64 version_to_update = task_description_version;
    bool is_outdated_version = task_description_current_version != version_to_update;
    bool is_expired_session  = !task_description_watch_zookeeper || task_description_watch_zookeeper->expired();
    if (!is_outdated_version && !is_expired_session)
        return;
    LOG_DEBUG(log, "Updating task description");
    reloadTaskDescription();
    task_description_current_version = version_to_update;
}
void ClusterCopier::process(const ConnectionTimeouts & timeouts)