**Describe the solution you'd like**

We already can run clickhouse-server without configured ZooKeeper (the tables will start in read-only mode)
and with configured ZooKeeper, if it starts to be inaccessible at runtime (the tables will be read-only until the session is re-established).

Let's also make it possible to start up when ZooKeeper is unavailable.

**Additional context**

If that will be very hard to implement, we can consider other options:
- lazy attaching of the tables after sever start-up;
- a maintenance mode when the tables are not attached at start-up and require manual ATTACH queries.
{
    try
    {
        removeFailedQuorumParts();
        activateReplica();
        const auto & zookeeper = storage.getZooKeeper();
        const auto storage_settings = storage.getSettings();
        storage.cloneReplicaIfNeeded(zookeeper);
        try
        {
            storage.queue.initialize(zookeeper);
            storage.queue.load(zookeeper);
            storage.queue.createLogEntriesToFetchBrokenParts();
            
            
            storage.queue.pullLogsToQueue(zookeeper, {}, ReplicatedMergeTreeQueue::LOAD);
        }
        catch (...)
        {
            std::lock_guard lock(storage.last_queue_update_exception_lock);
            storage.last_queue_update_exception = getCurrentExceptionMessage(false);
            throw;
        }
        storage.queue.removeCurrentPartsFromMutations();