Data model implementation - DO NOT MERGE

DO NOT MERGE

This PR is to enable discussion only.

The code in this branch is still a work in progress and is mainly intended to showcase ideas about how a data model could work and what each of the elements mean.