make env a hash again

Env being a struct is what caused the breakage with the middleware.  It prevented them from setting arbitrary keys on the Env without some extra work.  This turns it back into a Hash.  Do we like this approach?

1. Should we wrap Env as a hash instead of extending it?
2. I don't like `hash_accessor`, and would rather remove all uses of method accessors on Env in the codebase.

I think with this, we can push out a new rc for 0.9.0 and actually ship.

/cc @mislav @sferik