Adding support for versioning and migration to your Codable models.

I really like this idea from Krzysztof Zabłocki that adds support for versioning to Codable models. It's super lightweight, involving conformance to a single protocol and a custom decoder with one method, but allows us to decode any versioned model and apply all necessary migrations.