Proper browser caching

This pull request is dependent on #329, #423, and solves issues #376, #432

Issue:
We don't interact well with browser caching.  Specifically, we don't obey the If-Modified-Since (Last-Modified) header.  This causes the browser to "over-cache" our pages, since our other headers indicate cache time is (by default) really long.

Changes:   
* Use built-in django decorators to specify a "last modified" time for our cached pages.  Django then does the proper comparisons for us at the proper times, returning a 304 Not Modified only if the page hasn't changed.