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