Let stacks use iip, also edit in view menu.
Merge branch 'iip-stack'

* iip-stack:
  Let stacks use iip, also edit in view menu.
Arrow panning not works with rotated images.  We also have a view menu item to draw the history.
Merge branch 'draw-history'

* draw-history:
  Arrow panning not works with rotated images.  We also have a view menu item to draw the history.
Sending cache-control header
Compare tile load performance between new.slide-atlas (iipserver) and slide-atlas
Working cache for tile, except the resolution occurs after image store has been loaded
Rewrite tile HTTP caching to conform to standards and use Flask properly

* max-age and Expires should not use arbitrary hard-coded times ("12345")
* Flask's "make_conditional" should be used to produce the 304 response, as
it also sets other headers correctly
* the ImageStore parameter should be changed to an ObjectId to prevent
unnecessary queries
* Cache-Control headers should be set via Flask's methods, so "public"
doesn't get overwritten
* ETag should use the most specific value possible (which still ends up
as weak), not a generic value like ImageStore id
Remove Cache-Control max-age from attachment API
Merge branch 'dev/dj-cache-header-for-tiles'

* dev/dj-cache-header-for-tiles:
  Remove Cache-Control max-age from attachment API
  Rewrite tile HTTP caching to conform to standards and use Flask properly
  Working cache for tile, except the resolution occurs after image store has been loaded
  Compare tile load performance between new.slide-atlas (iipserver) and slide-atlas
  Sending cache-control header
Make the view menu disappear after save
Merge branch 'minor'

* minor:
  Make the view menu disappear after save
Persistent history and overlap for grid / arrow keys
Darker history
Merge branch 'persistent-history'

* persistent-history:
  Darker history
  Persistent history and overlap for grid / arrow keys