[Refactoring] Move Dsymbol::ungagSpeculative() implementation in dsymbol.c
[Refactoring] Reorder TemplateInstance fields
[Refactoring] Remove unnecessary variable `func` in FuncDeclaration::toObjFile()
Distinguish gagged instantiation and speculative instantiation

If a template is instantiated in template constraint, static if, or static condition, it's marked as speculative instantiation.
An instance is still speculative after whole semantic analysis completed, compiler can elide its code generation.

Template constraint evaluation may instantiate exactly same symbols multiple times (eg. issue 10133 test case in test/runnable/funclit.d).
It would cause linker error "duplicate COMDAT" in Win64. To avoid the issue, dmd should emit each symbols at most once.
fix Issue 13299 - Property not found with typesafe variadic opDispatch