Add rendering infrastructure (#29).

It's functional, but missing docs and sufficient test coverage.
Move groovy template rendering to the new infrastructure (#29).

Very breaking change.