feat(runtime): add memoization to genericType()

This is an initial implementation (lacking unit tests).

The rationale is that we need `genericType(Foo, Bar) === genericType(Foo, Bar)` for the Dependency injection in Angular.

Before this PR it was not possible to detect when two generic types match (as they are not ===).


@johnjbarton do you have any idea on how to use `new Map()` from within the runtime (type-assertion.js).

If I try `var map = new Map()`, it would result in a compilation error:
```
/home/victor/dart/traceur-compiler/bin/traceur.js:787
  var map = new Map();
                ^
ReferenceError: Map is not defined
    at $__2 (/home/victor/dart/traceur-compiler/bin/traceur.js:787:17)
    at Object.<anonymous> (/home/victor/dart/traceur-compiler/bin/traceur.js:821:3)
    at Module._compile (module.js:456:26)
    at Object.<anonymous> (/home/victor/dart/traceur-compiler/src/node/traceur.js:24:8)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
```