fix #1 and general refactor

The core change here is to make the value in the cache
be all the headers of a response and then when later checking
the cache, comparing etags, and using the cached headers to
send the full suite headers expected for a 304 by httpbis.

This resulted in a lot of changing to the code that was only
clear by moving around methods and otherwise changing the
structure of the code quite a bit.

The addition of the Holder object was to make sure that the
status and headers are never considered part of the EtagCache
object. While I was unable to fully confirm, it seems there's
a chance for a race condition in a threaded environment when you
hang arbitrary attributes on the `self` of a middleware. Even if
there isn't, the current code is a good deal more readable (not
to say actually readable, just a good deal more) than prior.