Support for more than one template type

Also removes the template type mangling from public view a bit.  This
does change both how template types are formatted in the yml and how
templated types are constructed (the generic constructor returns a
function)