Improvements to rendering/layouts

This is the implementation of everything defined in #359. I will update this description as I push new commits and later move this to the changelog.

### Enhancements

* [Controller] Support `put_view/2` to configure which view to use when rendering in the controller
* [Controller] Support templates as an atom in `Phoenix.Controller.render/3` as a way to explicitly render templates based on the request format
* [Controller] Split paths from external urls in `redirect/2`
* [Controller] `json/2` automatically encodes the data to JSON by using the registered `:format_encoders`
* [Controller] `html/2`, `json/2`, `text/2`, `redirect/2` and `render/3` now halt automatically
* [Controller] Add `accepts/2` for content negotiation 
* [Controller] Add `put_layout_formats` and `layout_formats` to configure and read which formats have a layout when rendering
* [View] Assigns are always guaranteed to be maps

### Deprecations

* [Controller] `html/3`, `json/3`, `text/3` and `redirect/3` were deprecated in favor of using `put_status/2`
* [Controller] `redirect(conn, url)` was deprecated in favor of `redirect(conn, to: url)`

### Backwards incompatible changes

* [Controller] Passing a string to render without format in the controller, as in `render(conn, "show")` no longer works. You should either make the format explicit `render(conn, "show.html")` or use an atom `render(conn, :show)` to dynamically render based on the format
* [View] Using `:within` was renamed in favor of `:layout` for rendering with layouts
* [Router] Router no longer defines default :browser and :api pipelines