Multi-version concurrency control

The database keeps several versions of a row so readers never block writers: each transaction sees a consistent snapshot. Old versions must be cleaned up, which is what vacuum does in PostgreSQL.