Accept an array of objects in dsv.format

This is a way of addressing #509. Following the discussion there, first take all keys from all objects, then remove all duplicates (or, retain only uniques). Then, map each row to the headers before formatting for *SV as normal. It feels a bit wordy, considering the requirements are so straightforward, so any suggestions on ways to reduce it would be appreciated.

Also: is checking the first element of `rows` sufficient?