Add an implementation of tuple_cat_apply which doesn't actually create any temporary intermediate tuples