Cobra: Making Transactional Key-Value Stores Verifiably Serializable