Switch to site code

Previously location importer/exporter used the doc id's for updating a location and matching to parents. This PR switches it to using the `site_code` field, which used to a required property on non-administrative locations (supply points). The field is now on all locations, no longer required (if you don't enter anything it auto generates).

This also adds the ability to do the full upload in a single pass as you can know ahead of time what the parent's `site_code` value is.

Commit history is long as it has had some back and forth in QA and a couple refactoring stages.

Has Christy's QA :heavy_check_mark: of approval.
i think `parent_child` is nontrivially expensive. probably worth making a memoized property on this object unless you had reasons why that wouldn't work