Refactored StaticFile class to use separate File class.

This makes the middleware more closely resemble how Rack::Static works, and adds support for byte ranges.