Fix the toString to use typeof instead of unwinding for module/class/function/enums

For the type expression "typeof A"
If A is the symbol name of a class, function, module, or enum
Emit "typeof A"
Else,
Unwind (aka flatten) the type expression for A.
If, during unwinding, you encounter a "typeof B" type expression, follow above
If import aliases are exported, emit into the .d.ts
Otherwise, flatten the aliases in the emitted .d.ts and do not emit the alias
Add overload to window.onerror for backwards compatibility.
Fix crash binding multiple top level declarations with value decls
Fix the assert in wrapSomeTypeParameter when parameter doesnt have type set
Resolve the type before it can be instantiated to make sure we are refering to correct type
fix duplicate type parameters to still have a symbol bound
fix duplicate type parameters to still have a symbol bound
Fix negitive test with recursive type now that each parameter has a symbol
Update failing test
Update the infinitely recursive relationship check
Fix goto def on source unit
Arguments inside function should always be resolved to local variable or argument symbol of type IArgument
Fix the infering logic for the rest parameters
Fix the Subtype, Supertype and assignablity for types with indexers
this catpure should be above default arg initializers
Shouldn't be allowed to assign to a function\
Adding tests for resolved bugs
Fix the signature type parameters identity logic
Types are identitical if we run to them recursively