Add support for parsing and evaluating isRecord() boolean expressions
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74355060
[NEW TYPE INFERENCE] Use persistent data structures from Clojure, if present.

Use reflection to silently fallback to slower NaivePersistent structures
if clojure is not accessible.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74358367
Automated g4 rollback of changelist 72155908.

*** Reason for rollback ***

Sometimes we do need to instantiateGenerics even when the type variable
to be substituted is "bound" by a nominal type.
See the added unit test.

Due to a couple more issues about the memoization in NominalType
and the mutation of the boundTypeVars parameter, I think it's easier
to just rollback for now and add back this perf optimization later
if needed.

*** Original change description ***

[NEW TYPE INFERENCE] Return early from instantiateGenerics when possible, to avoid creating new types.

***
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74359729