DenormalizeOnSaveMixin mixin

## Tasks

* [ ] Add tests
* [ ] Add some docs explaining how to use it
* [ ] Extract the actual denormalize loop into `utils` so it can be used without having to adjust a model
* [x] Update version number