Tracks last edited date and user, and adds has_changes for blocks

The `user_id` passed into `_update_single_item()` will always be None, so `edited_by` will always be None, but @nasthagiri will fix that in her work. STUD-1724

@cahrens @andy-armstrong @dmitchell 
```
updated_component = self.draft_store.get_item(location)
self.assertLess(old_edited_on, updated_component.edited_on)
self.assertEqual(updated_component.edited_by, dummy_user)
```