Prevent infinite recursion in TemplateTypeMap equivalence checks.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64263527
[NEW TYPE INFERENCE]

Create separate class to represent persistent maps with structural sharing to make TypeEnvs more efficient. This is a separate class so that we can try out different data-structure implementations.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64296595
[NEW TYPE INFERENCE]

Initial support for struct/dict.
Detect illegal property accesses and use of a struct with IN, but don't detect inheritance errors.

Fixes along the way:
- new heuristic for when to infer more vs warn (for names and properties).
- warn when the expr iterated over in for/in is not an object.
- analyze getelem in analyzeLValueFwd/Bwd if the index is not a string lit.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64299099
Native maven support for closure-compiler
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64304485
Add a warning for the use of goog.base that we can use to ban it for projects that want to support strict mode in uncompiled code.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64315048
Support passing promises to Promise.resolve in extern.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64315372
[NEW TYPE INFERENCE] Improve for/in and add a stray test for dicts.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64317540
[NEW TYPE INFERENCE] Make property maps also use new PersistentMap
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64319534