WIP: Use Camo ODM + NeDB/MongoDB
Camo is an ODM that uses either NeDB (file-based; in-memory for testing) or MongoDB as the database, depending on the connection URL.
Camo provides ES6 classes that are extended by each model class, which fits well with the existing system. It also provides pre/post save/delete hooks. It allows simple relationships between models to be defined so that arrays of ID strings are populated with the full object when loaded and converted back to ID strings when saved.
The main outstanding problem is that the schema for each model is defined in the class constructor, which makes it difficult for an app to add extra properties to a Fragment (for example).
There are some team-related tests that are still being skipped as the data model needs to be changed rather than re-implementing the current model, and I haven't done that here (yet).