**Use case**

Convert bitmask to position.
It would allow us to directly use FLAT dictionary or Enum datatype without jumping around slow `bitmasktoArray` and `arrayMap`

**Describe the solution you'd like**

```
SELECT
    arrayMap(x -> log2(x), bitmaskToArray(100)) AS bitmask,
    bitPositions(100)  AS bitpositions

┌─bitmask─┬─bitpositions─┐
│ [2,5,6] │ [2,5,6]      │
└─────────┴──────────────┘
```

{
        const ColumnDecimal<T> * col_dec = checkAndGetColumn<ColumnDecimal<T>>(col);
        if (col_dec)
        {
            const typename ColumnDecimal<T>::Container & in_vec = col_dec->getData();
            executeFloatAndDecimal<typename ColumnDecimal<T>::Container>(in_vec, col_res, sizeof(T));
            return true;
        }
        else
        {
            return false;
        }
    }
    static void executeOneString(const UInt8 * pos, const UInt8 * end, char *& out)
    {
        while (pos < end)
        {
            writeHexByteUppercase(*pos, out);
            ++pos;
            out += 2;
        }
        *out = '\0';
        ++out;
    }
    static bool tryExecuteString(const IColumn * col, ColumnPtr & col_res)