Caching middleware / Idiomatic RSpec

Really the result of two branches. Caches non-500s for an hour. Switches to `subject {...}`-based tests so we can use `it_behaves_like`