Introduce TemplateParsers and TemplateLayouts

A TemplateParser will take in a templateName and the contents of
the template as a string and will return a map of tempateNames to
template parse.Tree's. The reason for the map instead of simply
returning a single parse.Tree is to accomodate nested template
definitions, since a parse.Tree may only have a single template
definition within it. Template parsers use double extensions to find the
format and parser for it. For instance, a haml format file would have a
name like Index.html.haml or Index.haml.html. The parser will receive
the full file name including the .haml bit and is responsible for
removing it.

A TemplateLayout allows both standard Go templates and parsed templates
to surround the action template. It uses a function named yield and a
RenderArg with the key revelTemplateTarget to execute an inner template
from withing a layout template. Layout templates are set by the request
Format, so html layouts won't be used by default for json formats. A
layout can be disabled by simply setting the Controller.Layout to empty
string, while a separate Layout may be selected by setting the
Controller.Layout to a different name and format. For instance, a
default html layout might be Layouts/Application.html, which would be
set by setting revel.DefaultLayout to "Application.html". Setting an
alternate layout for an action to the file Layouts/Login.html would be
accomplished by setting c.Layout to "Login.html". All layouts would need
to remain in the Layouts folder, though this would not be difficult to
modify so that layouts become relative to the views root.