The compile function returns a template function. The template function takes two parameters, `context` and `options`. These are both optional parameters. This commit fixes `context` to be optional.
This enables each definition to have a readme if necessary.
Also a .json metadata file to help with package managers.
And last, to have different versions of the definitions.