Extract edition duplication

Moves the responsibility for duplicating an edition (creating a new version) out to its own class rather than filling up the controller.