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
* [View] Assigns are always guaranteed to be maps

### 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` is deprecated in favor of `:layout` for rendering with layouts
This is super nice! `put_view` was a really great idea :+1: