Initial working hydration code.

Also trying to create a cleaner separation between what goes into middlewares
and what goes into gc. I feel that, for some middlewares, there's too much
logic in gc. For example, auth should be 100% done in the middleware. But
that's trickier for more complex middleware like stats or hydration. Stats
is tricky because it has a background job which really doesn't belong in the
middleware. Hydration is tricky because a big part of hydration happens outside
the middleflow (actually hydrating a response and writing it out to the client).

Anyways, we'll see how it goes.