COOPR-629: Update template APIs to support extending templates and including partials

Base abstract template / persistence layer / base tests for partial templates.
Use `private static final Gson GSON = new Gson()` instead?