**Describe what's wrong**

It's not possible to initialize aggregation function from nullable types.

**Does it reproduce on recent release?**

Yes, 
ClickHouse version 21.10

```
SELECT initializeAggregation('uniqExactState', toNullable(''))


0 rows in set. Elapsed: 0.003 sec.

Received exception from server (version 21.10.1):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: Nested type AggregateFunction(uniqExact, String) cannot be inside Nullable type: While processing initializeAggregation('uniqExactState', toNullable('')). (ILLEGAL_TYPE_OF_ARGUMENT)


SELECT initializeAggregation('uniqExactState', toNullable(1))


Received exception from server (version 21.10.1):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: Nested type AggregateFunction(uniqExact, UInt8) cannot be inside Nullable type: While processing initializeAggregation('uniqExactState', toNullable(1)). (ILLEGAL_TYPE_OF_ARGUMENT)
```


**Expected behavior**

It should be possible to initialize aggregation function from nullable types.


**Additional context**

WA

```
SELECT arrayReduce('uniqExactState', [toNullable('')])

Query id: 29fc6760-78be-4f28-be5f-f1bbe12f04fc

┌─arrayReduce('uniqExactState', array(toNullable('')))─┐
│ 2���V���嵶����                                                │
└──────────────────────────────────────────────────────┘
```

{
    const IAggregateFunction & agg_func = *aggregate_function;
    std::unique_ptr<Arena> arena = std::make_unique<Arena>();
    const size_t num_arguments_columns = arguments.size() - 1;
    std::vector<ColumnPtr> materialized_columns(num_arguments_columns);
    std::vector<const IColumn *> aggregate_arguments_vec(num_arguments_columns);
    for (size_t i = 0; i < num_arguments_columns; ++i)
    {
        const IColumn * col = arguments[i + 1].column.get();
        materialized_columns.emplace_back(col->convertToFullColumnIfConst());
        aggregate_arguments_vec[i] = &(*materialized_columns.back());
    }
    const IColumn ** aggregate_arguments = aggregate_arguments_vec.data();
    MutableColumnPtr result_holder = result_type->createColumn();
    IColumn & res_col = *result_holder;
    
    auto * res_col_aggregate_function = typeid_cast<ColumnAggregateFunction *>(&res_col);
    if (!res_col_aggregate_function && agg_func.isState())
        throw Exception("State function " + agg_func.getName() + " inserts results into non-state column "
                        + result_type->getName(), ErrorCodes::ILLEGAL_COLUMN);
    PODArray<AggregateDataPtr> places(input_rows_count);
    for (size_t i = 0; i < input_rows_count; ++i)
    {
        places[i] = arena->alignedAlloc(agg_func.sizeOfData(), agg_func.alignOfData());
        try
        {
            agg_func.create(places[i]);
        }
        catch (...)
        {