**Describe the issue**
Allow to call `range()` with Int* data types.
Validate that arguments are positive.

**How to reproduce**
```
SELECT range(CAST('1', 'Int8'), CAST('10', 'Int8'))

Query id: 8710056b-08d9-454d-bb6a-e858b61dc9a3


0 rows in set. Elapsed: 0.081 sec.

Received exception from server (version 22.11.1):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: Illegal type Int8 of argument of function range: In scope SELECT range(CAST('1', 'Int8'), CAST('10', 'Int8')). (ILLEGAL_TYPE_OF_ARGUMENT)
```

: (end_data[row_idx] - start_data[row_idx] - 1) / step + 1;
            if (pre_values < total_values)
                throw Exception{"A call to function " + getName() + " overflows, investigate the values of arguments you are passing",
                            ErrorCodes::ARGUMENT_OUT_OF_BOUND};
            total_values = pre_values;
            if (total_values > max_elements)
                throw Exception{"A call to function " + getName() + " would produce " + std::to_string(total_values) +
                    " array elements, which is greater than the allowed maximum of " + std::to_string(max_elements),
                    ErrorCodes::ARGUMENT_OUT_OF_BOUND};
        }
        auto data_col = ColumnVector<T>::create(total_values);
        auto offsets_col = ColumnArray::ColumnOffsets::create(end_column->size());
        auto & out_data = data_col->getData();
        auto & out_offsets = offsets_col->getData();
        IColumn::Offset offset{};
        for (size_t row_idx = 0; row_idx < input_rows_count; ++row_idx)
        {
            for (size_t st = start_data[row_idx], ed = end_data[row_idx]; st < ed; st += step)
            {
                out_data[offset++] = static_cast<T>(st);
                if (st > st + step)
                    throw Exception{"A call to function " + getName() + " overflows, investigate the values of arguments you are passing",
                                ErrorCodes::ARGUMENT_OUT_OF_BOUND};
            }
            out_offsets[row_idx] = offset;
        }
        return ColumnArray::create(std::move(data_col), std::move(offsets_col));
    }
    template <typename T>
    ColumnPtr executeConstStart(