Version tracking

This PR adds the ability to store history of each document edits.
With each edits, each user will have the ability to:

- Compare changes with the latest version or with one of it's previous versions
- Rollback to one of the previous versions

@smebberson This is ready for review.
Does this `err` variable clash with the one on L19? I think it might need to be renamed...