Wire getDefinitionAtPosition using the new compiler implementation

There are some changes in behavior between old and new implementation, namely:
* module definition used to start at the module name, now it starts the module keyword, which is uniform with other constructs
* Goto def on function call used to take you to the matching signature instead of the definition, now it is always the definition
* new implementation support goto def on labels
* new implementation support goto def on string property names (e.g. a["prop"])
* new implementation support goto def on /// references
Symbols are local to a file, types are local to a typeChecking session. so types get destroyed, symbols stick as long as the file did not change, they have the same lifetime as the tree.
this works nicely for everything, as these are "unmerged" symbols, so they are truly local to the file. the unknownSymbol is the only exception, we use it as a marker for an error, and we do use referential checks to see if we have an error or not, creating a new one breaks this assumption and different places of the typechecker behave unexpectedly. this is a special case, and does not represent any user defined symbols per se.