Add CSV generation facility to Analyze Tasks
Add CSV generation facility to Analyze Tasks

Currently, the CSV Download in the UI is handled via the
tableExport library which converts a rendered HTML table
to CSV and downloads the file. Since when we're exporting
from the MultiShareModal we will not have the renderings
at hand to reference, we must work off the internal data
each Analyze Task has.

This generic implementation gets a list of column headings
from the keys of the first result, and then uses the values
of every result to get the rows. They are then stitched
together with commas and newlines to make a valid CSV.

Care is taken to quote every value, so empty values are
aligned with the right columns. `null`s are replaced with
empty string, and GeoJSONs are converted to WKTs.

WikiWatershed/model-my-watershed,WikiWatershed/model-my-watershed,WikiWatershed/model-my-watershed,WikiWatershed/model-my-watershed,WikiWatershed/model-my-watershed