Add layout support

This PR adds support for a default layout and per template alternative layouts.

- Users can now specify a default layout and layout path to use.
- The render generator function causes partials and layouts to be
  cached. There is probably a better way to do this, but now
  everything is guaranteed to be loaded when a template is
  rendered.
- Specify a layout by adding `{{!< layoutName }}` somewhere in
  your template.
- Update README
- Update tests