Add new full-page caching features

These features make it much easier to emit pages that are fully cacheable
and can be served to any user, along with the HTTP Cache-Control response
header to inform intermediate proxies and browser caches about the
cacheability and cache lifetime.

To start using the new features:

Add to catalog.cfg:

SuppressCachedCookies yes

Add to pages or templates you'd like to cache (for 2 hours, in this
example), maybe starting just with pages/index.html:

[if-not-volatile][tag pragma cache_control]max-age=7200[/tag][/if-not-volatile]

That's all you really need for a basic setup.

If you'd like to have a cookie contain the current cart or login
state, you can write a catalog Sub or a GlobalSub (named, say,
cookie_state_update) and have it run after every relevant event. Add
to catalog.cfg:

OutputCookieHook cookie_state_update

A detailed write-up of all these features is here:

http://blog.endpoint.com/2013/10/full-page-caching-in-interchange-5.html

Mark Johnson's talk at the Ecommerce Innovation 2013 conference is
reported here in slides and video:

http://www.icdevgroup.org/slides/eic2013/full_page_caching.pdf
http://www.youtube.com/watch?v=n_FbzT_g_RM

Documentation in the xmldocs system is still needed.

Modified squashed commit of the following:

commit ec7147fdc8126e59df482911c7d242221e8b7720
Author: David Christensen <david@endpoint.com>
Date:   Tue May 7 14:44:12 2013 -0500

    add if_not_volatile usertag to conditionally return data if the current request is not Volatile

commit b02a76d058362f805585c811203572ddc3b75f07
Author: David Christensen <david@endpoint.com>
Date:   Fri Apr 26 16:12:22 2013 -0500

    Suppress cookies for 400-level errors

commit a2e646528c5b6a1945229ed62bb77d67af24b10b
Author: David Christensen <david@endpoint.com>
Date:   Wed Jun 8 14:48:27 2011 -0500

    clear the cookie jar when suppressing cookies

commit c54f02b2c4aa619821a9009e3922f7147d60d76f
Author: David Christensen <david@endpoint.com>
Date:   Fri Apr 26 16:09:59 2013 -0500

    Mark specific routines as always Volatile

commit c0161345066a2f042f808037cf9391a1dbbfff89
Author: David Christensen <david@endpoint.com>
Date:   Thu Jun 2 00:00:02 2011 -0500

    suppress session write when cookies are suppressed

commit 487511ce0627cd96e3469148603f82ce2a09d970
Author: David Christensen <david@endpoint.com>
Date:   Fri Apr 26 16:04:53 2013 -0500

    add an OutputCookieHook sub to be run when cookies are being created

commit f0d10bd7b7f4d477c8d71c56277c13b65ced2e35
Author: David Christensen <david@endpoint.com>
Date:   Mon Apr 4 15:30:51 2011 -0500

    Do not set cookies on pages marked as cacheable

    This applies to all cookies currently, with particular attention placed on the MV_SESSION_ID.  This
    change is intended to alleviate the "first page hit" cache issue which leads to IC assigning a session
    id even for pages which would be fully cacheable and then never actually generating the cacheable
    content in question until a subsequent hit from a UA with the provided MV_SESSION_ID.

    This is of particular concern when considering the case of a DDoS in which a huge number of connections
    are made from unique instances.  Since the intent of the nginx cache is to prevent such traffic from
    ever reaching the backend, the existing behavior would result in a counter-intuitive effect of all bot
    traffic being passed directly to the "protected" backend when there was no document already in the nginx
    cache, with the result that each backend-handled request would be itself uncacheable, having a Set-Cookie
    header returned with the response.

    Currently this fix will affect all cookies being generated from interchange on a page which is marked
    cacheable (specifically one which has a Pragma cache_control value set to something other than no-cache).
    We consider this acceptable as we are also moving the setting of the existing cookies to client-side code
    where possible; if this ends up being untenable, we will see about changing this specific code to just
    affect the MV_SESSION_ID cookie.
Update manifest
Bump version to 5.8.1