Motivation: old implementation of df.drop() produced LLVM IR of large size on DFs
with hundreds of columns, since it extracts all the columns from original DF and then packs
them into a internal structure (a tuple of lists of arrays) again. The new implementation
will make copy of internal df structure and just pop dropped columns from selected lists, which
heavily reduces IR size and compilation time.
Motivation: old implementation of df.drop() produced LLVM IR of large size on DFs with hundreds of columns, since it extracts all the columns from original DF and then packs them into a internal structure (a tuple of lists of arrays) again. The new implementation will make copy of internal df structure and just pop dropped columns from selected lists, which heavily reduces IR size and compilation time.