ability for cache_key to be a block

Ref #1064

- Allows cache_key to be block and get re-evaluated each request.
- API:
 
```ruby
  get '/foo', :cache => true do
     cache_key { param[:id] }
     "my id is #{param[:id}"
  end
```