**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.
if (start_as_follower)
            result.servers_start_as_followers.insert(new_server_id);
        auto endpoint = hostname + ":" + std::to_string(port);
        auto peer_config = nuraft::cs_new<nuraft::srv_config>(new_server_id, 0, endpoint, "", !can_become_leader, priority);
        if (my_server_id == new_server_id)
        {
            result.config = peer_config;
            result.port = port;
        }
        result.cluster_config->get_servers().push_back(peer_config);
        total_servers++;
    }
    if (!result.config && !allow_without_us)
        throw Exception(ErrorCodes::RAFT_ERROR, "Our server id {} not found in raft_configuration section", my_server_id);
    if (result.servers_start_as_followers.size() == total_servers)
        throw Exception(ErrorCodes::RAFT_ERROR, "At least one of servers should be able to start as leader (without <start_as_follower>)");
    return result;
}
KeeperStateManager::KeeperStateManager(int server_id_, const std::string & host, int port, const std::string & logs_path)
: my_server_id(server_id_)
, secure(false)
, log_store(nuraft::cs_new<KeeperLogStore>(logs_path, 5000, false, false))
{
    auto peer_config = nuraft::cs_new<nuraft::srv_config>(my_server_id, host + ":" + std::to_string(port));
    configuration_wrapper.cluster_config = nuraft::cs_new<nuraft::cluster_config>();
    configuration_wrapper.port = port;
    configuration_wrapper.config = peer_config;
    configuration_wrapper.cluster_config->get_servers().push_back(peer_config);
}
KeeperStateManager::KeeperStateManager(