Refactor response preparation into prepare-response

This removes all the etag and gzip code and moves it into a separate module called "prepare-response" which is suitable for preparing any response that must be cached in memory and support gzip/etag/etc.

I think it's a good thing that `compile.js` is no longer responsible for caching and generating MD5s and Gzipped versions of the content.  Hopefully we can pull compile.js out into a separate module as well at some point.