**Use case**

Viewing binary data such as bitmasks, hashes, internal representation of IEEE-754 numbers, etc.
Mostly for debugging.

**Describe the solution you'd like**

Similar to `hex`/`unhex`.

`bin` - returns a string with `0` and `1`. Bits are in "human" order, most significant first. Most significant zero bits are not printed (except the case with single zero).

**Describe alternatives you've considered**

Now I have to run interactive `python` from command line, but I will be more happy using ClickHouse.

**Caveats**

The name `bin` may suggest that the function will "split data into bins" but it is completely unrelated.
ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override
    {
        auto col_str = ColumnString::create();
        ColumnString::Chars & out_vec = col_str->getChars();
        ColumnString::Offsets & out_offsets = col_str->getOffsets();
        const auto size_per_row = arguments.size() + 1;
        out_vec.resize(size_per_row * input_rows_count);
        out_offsets.resize(input_rows_count);
        for (size_t row = 0; row < input_rows_count; ++row)
        {
            out_offsets[row] = size_per_row + out_offsets[row - 1];
            out_vec[row * size_per_row + size_per_row - 1] = '\0';
        }
        Columns columns_holder(arguments.size());
        for (size_t idx = 0; idx < arguments.size(); ++idx)
        {
            
            columns_holder[idx] = arguments[idx].column->convertToFullColumnIfConst();
            const IColumn * column = columns_holder[idx].get();
            if (!(executeNumber<UInt8>(*column, out_vec, idx, input_rows_count, size_per_row)
                || executeNumber<UInt16>(*column, out_vec, idx, input_rows_count, size_per_row)
                || executeNumber<UInt32>(*column, out_vec, idx, input_rows_count, size_per_row)
                || executeNumber<UInt64>(*column, out_vec, idx, input_rows_count, size_per_row)