Templates cleanup

This branch refactors the template layer:

* Document and spec everything in Phoenix.Template
* Further optimize the Phoenix.HTML.Safe protocol and add unit tests
* Simplify the code template engines is required to implement
* Only load templates in the current directory (i.e. it no longer includes subdirectories)
* Add format encoders (see #414)
* Add .exs engine and .json encoder

This is part of the work for v0.6.
The `Template.Engine` contract is that the AST for the entire `render/2` function is returned. I think this PR changes that to return the contents of the function, leaving the `def render/2` up to the caller. If we want to go this route, we need to do it asap as we'll break the couple existing template engines out there, but the fixes should be pretty painless. Is there a particular reason to prefer quoted contents vs returning the entire function?