Add caching plugin, for handling http caching

This implementation is borrowed from Sinatra, with not much in the
way of changes other than some simple optimizations and a more
restricted API.  For example, expires only accepts an integer
number of seconds, and last_modified only accepts Time instances.