**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]      │
└─────────┴──────────────┘
```

{
        bool was_nonzero = false;
        for (int offset = (sizeof(T) - 1) * 8; offset >= 0; offset -= 8)
        {
            UInt8 byte = x >> offset;
            
            if (byte == 0 && !was_nonzero && offset)
                continue;
            was_nonzero = true;
            writeHexByteUppercase(byte, out);
            out += 2;
        }
        *out = '\0';
        ++out;
    }
    template <typename T>
    bool tryExecuteUInt(const IColumn * col, ColumnPtr & col_res) const