Explicit all or nothing validation on CSV upload

Make it a bit more explicit that if any rows in the CSV are invalid then none will be added to backdrop.
Make CSV and JSON endpoints work in a similar way

- Validate bucket name in the same way
- Validate incoming records in the same way
Validate CSV data is UTF8
Rearrange write API validation

- Share common code in write API actions
- Move most validation into Record constructor so that we cannot create invalid records.
- Raise ValidationErrors from parsing and validating. Allows for simpler error handling.