Refactor Rack::Static and improve directory index support

This is a reissue of #403, rebased and with test.

This patch makes the the Rack::Static code a little more efficient and readable. At the same time it adds support for existent directory index support --instead of just checking for a trailing /, failing that it will check to see if the the path is an actual directory on disk. This is indispensable in some use cases where a trailing slash can not be insured, but the directories index file still needs to be served.

If necessary we can add a new configuration option to conditionally support this new directory behaviour, but I did not do so presently b/c I suspect it would be a YAGNI.

Congratulations, you just sent me an essay about how the shell is broken, incorrectly reporting that the filesystem is broken, as a justification for an invalid patch.

If you want to force your opinions on people in your own libraries and frameworks, that's totally fine, but I neither agree with you, nor can force such opinions on rack users. Please stop making this difficult, it's making me upset.