Add the option to keep or overwrite existing mappings
Memoize deduplicated_csv_rows

We need to use this more than once for validations.
Validate that old URLs are on the correct site
Validate that canonical paths are present on all batches

This puts errors onto fields which don't exist in the form, so the
view needs to check more than one possible kind of error to highlight
the appropriate field.
Validate all new URLs in the batch for length

To do this we have added a class, EachInCollectionValidator, which
calls a validator class on each item in the collection. It puts the
errors on the given attribute rather than each value individually,
so that they will attach to the correct field in the form.

We are doing this because we want to be able to use activerecord-import
to import the records in the batch without going through validations
on save.
Validate that all new URLs are valid URLs
Validate new URLs against the whitelist
Redisplay the form if there are validation errors
Move header checking onto ImportBatchRow

This simplifies the detection of header rows and other rows which can't
be processed and makes it more robust by handling leading whitespace.

ImportBatchRow is responsible for taking a parsed row of CSV and
presenting it so that it can be validated as part of the batch and
then have an entry created from it. It shouldn't be the responsibility
of deduplicated_csv_rows to know enough about the CSV row to pass it
as old and new values.