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 
Oh, other nitpick, always add the spurious extra comma at the end of these multiline dicts, arrays, tuples, and arglists so that if you add another at the end, the diff only shows for the new one.