Content negotiation - Vary Render behavior depending on the "Accept" header.

In particular:
- c.Request.Format is set to one of ("html", "xml", "txt", "json") based on Accept header.
- Use text/template to render json/txt templates, and html/template for html/xml
- Render looks for templates with extension matching the Format
-- e.g. Controller/Action.{html,json,xml,txt}
- For formats (xml, json), If no template exists, serialize the first argument instead.
- Return 404 if template can not be found

Fixes #130