**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.
M(227, UNEXPECTED_FILE_IN_DATA_PART) \
    M(228, BAD_SIZE_OF_FILE_IN_DATA_PART) \
    M(229, QUERY_IS_TOO_LARGE) \
    M(230, NOT_FOUND_EXPECTED_DATA_PART) \
    M(231, TOO_MANY_UNEXPECTED_DATA_PARTS) \
    M(232, NO_SUCH_DATA_PART) \
    M(233, BAD_DATA_PART_NAME) \
    M(234, NO_REPLICA_HAS_PART) \
    M(235, DUPLICATE_DATA_PART) \
    M(236, ABORTED) \
    M(237, NO_REPLICA_NAME_GIVEN) \
    M(238, FORMAT_VERSION_TOO_OLD) \
    M(239, CANNOT_MUNMAP) \
    M(240, CANNOT_MREMAP) \
    M(241, MEMORY_LIMIT_EXCEEDED) \
    M(242, TABLE_IS_READ_ONLY) \
    M(243, NOT_ENOUGH_SPACE) \
    M(244, UNEXPECTED_ZOOKEEPER_ERROR) \
    M(246, CORRUPTED_DATA) \
    M(247, INCORRECT_MARK) \
    M(248, INVALID_PARTITION_VALUE) \
    M(250, NOT_ENOUGH_BLOCK_NUMBERS) \
    M(251, NO_SUCH_REPLICA) \
    M(252, TOO_MANY_PARTS) \
    M(253, REPLICA_IS_ALREADY_EXIST) \
    M(254, NO_ACTIVE_REPLICAS) \
    M(255, TOO_MANY_RETRIES_TO_FETCH_PARTS) \
    M(256, PARTITION_ALREADY_EXISTS) \
    M(257, PARTITION_DOESNT_EXIST) \
    M(258, UNION_ALL_RESULT_STRUCTURES_MISMATCH) \