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 
Are you sure you need to get the published one? If it's been published, I believe `draft.published_on` will be set and you can just compare `edited_on` with `published_on`. It saves one db query.