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.

Spaces aren't valid in URLs, trialing spaces aren't valid in Windows, and even if they are possible in Linux it's a world of headache. Here's some learning for you: http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html. But hey if you still think my argument doesn't have a point, have at it.