This keeps us from knowing about the particular keys in the env hash for the things this middleware cares about
We don't need to dup the file handler all the time if we just cache path and range calculations on the stack, then allocate an iterator object when we actually need to serve up a file
We want to set and get arbitrary data associated with a request object. Internally, this will just be set in the env hash, but in the future we may want to change where the data is stored (hopefully we'll stop passing an env hash around everywhere)
ShowExceptions currently parses it's ERB template on instantiation. This can add significant overhead, especially for frameworks and applications that may add middleware dynamically on each request, such as Scorched, where caching an application instance is non-trivial.