Allows arbitrary objects to be passed to templates as data
Add documentation
Separate out file loading function
Warn user about unknown datatypes
Fail fast when given no data
Move warning to reduce duplication