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.