In its current form, new_data_frame() is next to useless for tibble. We need a way to keep the attributes of x and to ignore row.names and names in ....
The current code in tibble is fine, I wonder if we can find a way to remove the two C helper functions and use vctrs::new_data_frame(). This seems to require a code that efficiently merges two pairlists (similarly to modifyList()).