add ModifyCheckpoints handler

separates requests that change specified checkpoint IDs from those that do not.
checkpoint info is a dict

two keys: checkpoint_id and last_modified
expose notebook checkpoints in html/js

- cmd-S does a plain save
- ^M-s does checkpoint
- add save checkpoint to File menu
- save button in bar does checkpoint
add some checkpoint messages to the notification area
add Revert to the menu bar
trigger autosave on tab/window close

instead of "please don't leave!"
add autosave timer

autosave interval is tuned based on the duration of saves.
Autosave will never happen more frequently than every 30 seconds,
and if saves take more than 3 seconds, autosave will fire every 10x the duration of the save (i.e. if save takes 6 seconds, it will be every 60 seconds, etc.)
only autosave when dirty
set default autosave interval to two minutes
s/autosave_notebook/set_autosave_interval/
*all* user-initiated saves create a checkpoint
add %autosave magic from autosave extension
only save on close if autosaving
sync with previous handler changes

use IPythonHandler, avoid self.application
Save and Checkpoint