DNS changes

***Warning: Contains schema changes. A new schema migration is required.***

---

**Resolves issues #723, #707, and #575.**

Additional changes:

- Remove garbage.
- [x] Rework `Domain.soa` assignment so that it's more self-contained and reliable.
- [x] Remove `SOA` field from domain forms.
- [x] Rework `reverse_domain` assignment so that's it's more efficient and doesn't have to happen as often.
- [x] Require a `PTR` to have an IP that's in a reverse zone.
- [x] Fix `CydnsRecord.label_domain_from_fqdn`, which worked incorrectly when a DNS record's FQDN was the same as its domain's name.
- [x] Fix `PTR.bind_render_record`, which rendered the left-hand side incorrectly if the `reverse_domain` had fewer than four octets (for IPv4).
- [x] Create every reverse zone that Maintain has, even if it's not in Maintain's database.
- [x] Always migrate `SOA` fields from Maintain if possible.
- [x] Require a delegated domain to be in a zone.
- [x] Use transactions around **all** nested saves and deletions.