Implement 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` in you program with `StaticWithCache` and the client will magically start to cache files :)

Closes #11. (not sure about this, since the issue is also talking about a general caching middleware?)