Support custom task templates

Closes #29