**Use case**
Text preprocessing and matching inside ClickHouse.

**Describe the solution you'd like**
Wrap functions from `icu` library. The functions should work on UTF-8 data.

**Additional context**
See also a sibling task: #17182.

M(609, FUNCTION_ALREADY_EXISTS) \
    M(610, CANNOT_DROP_SYSTEM_FUNCTION) \
    M(611, CANNOT_CREATE_RECURSIVE_FUNCTION) \
    M(612, OBJECT_ALREADY_STORED_ON_DISK) \
    M(613, OBJECT_WAS_NOT_STORED_ON_DISK) \
    M(614, POSTGRESQL_CONNECTION_FAILURE) \
    M(615, CANNOT_ADVISE) \
    M(616, UNKNOWN_READ_METHOD) \
    M(617, LZ4_ENCODER_FAILED) \
    M(618, LZ4_DECODER_FAILED) \
    M(619, POSTGRESQL_REPLICATION_INTERNAL_ERROR) \
    M(620, QUERY_NOT_ALLOWED) \
    \
    M(999, KEEPER_EXCEPTION) \
    M(1000, POCO_EXCEPTION) \
    M(1001, STD_EXCEPTION) \
    M(1002, UNKNOWN_EXCEPTION) \
namespace DB
{
namespace ErrorCodes
{
#define M(VALUE, NAME) extern const ErrorCode NAME = VALUE;
    APPLY_FOR_ERROR_CODES(M)
#undef M
    constexpr ErrorCode END = 3000;
    ErrorPairHolder values[END + 1]{};
    struct ErrorCodesNames
    {
        std::string_view names[END + 1];
        ErrorCodesNames()