wip commit for template grammar
WIP commit of parser template extensions
using only a single type of StorageExpr node
update template arg parse rules
regenerate the parse table
rename StorageDef -> StorageExpr
fixup a few lineno issues
update ast to use typename for template type
remove unneeded updates to the first lineno
WIP update for compiler.

Moving towards implementing templates in the compiler. This starts
breaking out the code generation into a write object which can be easily
reused in the various parts of the compiler. It also makes the visitor
methods easier to understand.
Revert "WIP update for compiler."

This reverts commit ab8188f93dbc47cb794a13fe38dec9ca345ff99d.
use 'static' instead of 'const' as the static qualifier
'name' is more accurate than 'typename' for a template
WIP commit for template implementation
update template arg spec

- cannot combine specialization with default value
- cannot invoke a template with keyword arguments
regenerate the parse tab
break out the compiler into separate modules
update the Template classes
add compiler helpers to make scope keys and templates
WIP update to the main compiler