**Describe the unexpected behaviour**
ClickHouse Keeper reached consensus and chose the leader with incorrect configuration:
``` yaml
raft_configuration:
          server:
            - id: 0
              hostname: keeper-0
              port: 44444
            - id: 1
              hostname: keeper-0
              port: 44444
            - id: 2
              hostname: keeper-0
              port: 44444
```
Nodes had different ids to achieve this.
 
**Expected behavior**
Add sanity checks for raft config:
- No duplicate keeper nodes 
- No duplicate ids

We can 
1) Fail if keeper/server starts with such configuration
2) We should not allow to commit this configuration to log even if bad node proposed such change.
result.emplace_back(ConfigUpdateAction{ConfigUpdateActionType::AddServer, server_config});
    }
    
    for (auto [old_id, server_config] : old_ids)
    {
        if (!new_ids.count(old_id))
            result.emplace_back(ConfigUpdateAction{ConfigUpdateActionType::RemoveServer, server_config});
    }
    {
        std::lock_guard lock(configuration_wrapper_mutex);
        
        for (const auto & old_server : configuration_wrapper.cluster_config->get_servers())
        {
            for (const auto & new_server : new_configuration_wrapper.cluster_config->get_servers())
            {
                if (old_server->get_id() == new_server->get_id())
                {
                    if (old_server->get_priority() != new_server->get_priority())
                    {
                        result.emplace_back(ConfigUpdateAction{ConfigUpdateActionType::UpdatePriority, new_server});
                    }
                    break;
                }
            }
        }
    }
    return result;
}
}