More tweaks to infinitely expanding type detection
Cache the results of some calls to the IOHost for perf.

During resolution we often try to resolve the same paths over and over again.
For example, a project may have file A.ts and B.ts both of which have the same
relative import of './C.ts' off of the same parent path.  Resolving this combined
more than once is unnecessary.  By caching these values, we get around a 15-25%
speedup on 'import' heavy projects.
Report errors of overload resolution if typeCheck for it is deferred.
Add testcase around return parameter best common type.
Use the new bitmatrix type to cache results of the identical checks.
Use bit matrices for subtype and assignability caches as well.

This helps us avoid unnecessary allocations of the IDs we used to create to index
into the cache.
Remove some usages of the pull id string.
Use numeric indices instead of string indices for several symbol collections we use.
Fix incorrect indexing bug.
Use bitmatrices in our generic wrapping checks so we don't have to create string keys.
Use an array in another location.
Use arrays with numeric indexing instead of objects with string indexing.
Use an array instead of an object in some of the candidate inference code.
Use a bitmatrix for argument inference.
Remove the symbol ID string.

Also, provide a specialized instantiation cache for the common case of instanting a
generic type with a single type named type argument.  (i.e. Foo[], List<Whatever>).
Rather than going back to the host for the document version, just access it off the document itself.
reenabling test.
Properly set the 'text' value for a symbol with a numeric name.

This is necessary to detect duplicates between members names 0 and 0.0 for example.
Rename 'text' to match 'valueText' to match fidelity.
Rename 'actualText' to 'text' to match Fidelity.