update documentation
refactor common code
get rid the ! requirement for template instantiation

this way is cleaner, and I doubt there will be the need to add function
call syntax in the future.
no need to check for null arguments

the ast node will always have an arguments object.