Remove implicit use of indifferent_params on why page

The indifferent params plugin is not loaded, so the code itself
was not valid.
Explain plugin :all_verbs usage on why page

It doesn't make sense to only explain plugin :render now that
:all_verbs is being used as well.
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.
prevent ruby warning on undefined instance variable
Fix some -w warnings
Add spec_w task for running specs with warnings enabled

This filters out warnings that should be ignored, using the same
criteria Sequel uses.
Make r.multi_route prefer longer route if multiple routes have the same prefix

Previously, if you had named routes "foo" and "foo/bar", and you
got a request for "/foo/bar/baz" the route chosen would depend on
the order the entries were added to the hash (and would be
arbitrary on ruby 1.8).  This sorts the entries and reverses the
output, ensuring that longer entries come before shorter entries
in the regexp union, so that they are matched first.
Add namespace support to the multi_route plugin, to support more complex applications

Complex applications may need the flexibility r.multi_route offers
at multiple points in their routing tree.  For example, if you want
to store your named routes in a directory tree:

  /routes/foo.rb
  /routes/foo/baz.rb
  /routes/foo/quux.rb
  /routes/bar.rb
  /routes/bar/baz.rb
  /routes/bar/quux.rb

You can load all of the routing files in the routes subdirectory
tree, and structure your routing tree as follows:

  # app.rb
  route do |r|
    r.multi_route
  end

  # routes/foo.rb
  route('foo') do |r|
    check_foo_access!
    r.multi_route('foo')
  end

  # routes/bar.rb
  route('bar') do |r|
    check_bar_access!
    r.multi_route('bar')
  end

  # routes/foo/baz.rb
  route('baz', 'foo') do
    # ...
  end

While here, I noticed that r.multi_route ignored the named route
return value.  If you are passing a block, this is fine, as the
API is that the block is used instead.  However, if you are not
using the block, it should use the named route return value instead
of always using nil in that case.
Add chunked plugin, for easy streaming of template responses using Transfer-Encoding: chunked

This should allow for faster page rendering on the client, at the
expense of harder to debug errors and lack of flexibility in the
application (since content templates can no longer make state
changes that are picked up by layout templates).
Use allocate instead of new in rack app

Roda by default does not define initialize for the instance scope,
so calling new is the same as calling allocate, just slower.

It may be faster to use new(env).call(&block) if #call doesn't
call #_route, but that would change the API, and in my testing it
isn't conclusively faster in all cases.
Add some notes about flushing in subtemplates to the chunked plugin
Add some specs to get back to 100% coverage

Only significant code change is that the Roda.new in the middleware
plugin now requires an argument.  Now that Roda uses allocate
instead of new for creating new instances, new should now only be
called in a middleware setting.
Add note about proxy http versions to chunking plugin doc
Add note to chunked plugin about issue when using flash plugin
Add response.finish_with_body

This should be used whenever you want to keep the current request
status and headers, but want to use a different body (that may not
just be a simple array).

Since we now support using a different response body, it doesn't
make sense to automatically set a Content-Length header that may
not match.  So change things so that response.write does not
set a Content-Length header, just update the length.  Have
response.finish set the Content-Length header to the length.
Don't have response.finish_with_body set Content-Length.
This also has the advantage of being faster if calling res.write
multiple times, since the Content-Length header will only be
set once.

Update the chunked and streaming plugins to use this new method.
Handle exceptions with newlines in the message in error_email plugin

This actually handles all header values with a new line. This
converts the value to CRLF followed by space.  This also separates
all headers by CRLF, and uses CRLFCRLF to separate the headers from
the body.
Merge branch 'master' into assets
Use the caching plugin so assets don't have to be rerendered every time

Add information on asset precompilation, with an example.

Add :compiled_prefix option, which allows you do have a different
prefix than :prefix, though it still defaults to :prefix.

Don't default :css and :js to an empty array, allow them to be nil,
and don't write empty compiled assets for them in that case.

Make read_asset_file take the full path.

Don't add the asset headers to the response until after last modified
is checked.
Have caching plugin remove Content-Type and Content-Length for 304 responses

Rack::Lint at least complains about including these headers for
304 responses.
Merge branch 'master' into assets