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 
Since any changes after this goes live will have an edited_on and since we don't proactively create drafts, I think, actually, True is the right value. That is, if there's a draft now, that implies the user converted to draft and the safest thing is to say "it might be different" so they remember to publish it. Any changes they make after this release goes live, will have a edited_on so the semantics will only be confusing for a short period of time.