(refactor) Move handler into dedicated module
(refactor) Add new type for requested paths

This type contains a lot of the logic that previously was in `Static`.
This has two advantages:
- It simplifies `Static` and makes it easier to read.
- It makes it possible to write other handlers without duplicating code
  from `Static`.
(refactor) Move FileError into dedicated module
(feature) Implement 304-caching
(cleanup) Simplify tests file name
Add test for "redirect to trailing slash" behavior
(doc) Add an example for combining routes and a static file server.

This adds an example to a seemingly commonly asked question of how to
serve files at a specific mount point while delegating the rest of the
routes to a router.
(refactor) Fix style nitpicks and move root_path.
Merge branch 'hannobraun-feature/304-caching'

The approach taken here is to implement caching in a separate
handler that is a drop-in replacement for `Static`. Simply replace
`Static` program with `StaticWithCache` and the client will
magically start to cache files.