Improve URI.equals performance.

The main improvement is that we're vastly reducing
the amount of garbage this method creates.

Also, get rid of some incorrect checks and add a new
benchmark test case.

Before vs. After:

URI                            Equals     1540.1 =
URI EqualsWithHeavilyEscapedComponent 11921397.1 ==============================

URI                            Equals     1337.2 =
URI EqualsWithHeavilyEscapedComponent   588934.3 ==============================

Change-Id: I9ddb87b8267f0ac6a3ac85c2989cc0dd305ef6a1
Minor cleanup of deepHashCode / deepEquals.

These methods used equals() comparisons where identity
checks would've sufficient. As expected, this results in a
small but measurable performance increase on both art
& dalvik.

---------------------- After --------------
ART:
    arrayLength    benchmark      us linear runtime
              1 DeepHashCode    8.08 =
              1       Equals   17.68 =
              4 DeepHashCode    8.63 =
              4       Equals   18.20 =
             16 DeepHashCode   19.59 =
             16       Equals   41.19 =
            256 DeepHashCode  255.41 =
            256       Equals  483.61 ==
           2048 DeepHashCode 2321.91 ==============
           2048       Equals 4932.40 ==============================
Dalvik:
    arrayLength    benchmark      us linear runtime
              1 DeepHashCode    32.7 =
              1       Equals    65.3 =
              4 DeepHashCode    34.4 =
              4       Equals    67.7 =
             16 DeepHashCode    76.0 =
             16       Equals   142.8 =
            256 DeepHashCode   755.6 =
            256       Equals  1515.6 ===
           2048 DeepHashCode  6915.4 ===============
           2048       Equals 13786.6 ==============================

------------------------ Before --------------------
Art:
    arrayLength    benchmark      us linear runtime
              1 DeepHashCode    8.13 =
              1       Equals   17.86 =
              4 DeepHashCode    8.63 =
              4       Equals   18.92 =
             16 DeepHashCode   19.59 =
             16       Equals   40.89 =
            256 DeepHashCode  253.88 =
            256       Equals  477.02 ==
           2048 DeepHashCode 2795.26 ================
           2048       Equals 4962.11 ==============================

Dalvik:
    arrayLength    benchmark      us linear runtime
              1 DeepHashCode    32.8 =
              1       Equals    66.7 =
              4 DeepHashCode    34.4 =
              4       Equals    70.1 =
             16 DeepHashCode    74.1 =
             16       Equals   147.9 =
            256 DeepHashCode   805.0 =
            256       Equals  1573.2 ===
           2048 DeepHashCode  7253.4 ===============
           2048       Equals 14349.8 ==============================

bug: 9320068

Change-Id: Id73bf38dd0777b2ec9004a2941523d082bbc74c9
Don't force MemoryBlocks on classes that don't care.

Only MappedByteBuffer and DirectByteBuffer need to know
about this abstraction.

Change-Id: I293284c8b8a73ac01463337dc8a1e22d16cd378d
Fix java.util.Random performance regression.

With the monitor change in ART, getting the identity hash code of an
object puts the hash code in the lock word. This hurts performance
if you synchronize on said object since it makes it that we always
go slow path for monitor enter and exit. Although the fix
allocates a new object in the Random constructor, it should not cause
performance problems assuming people don't excessively create new
random number generators.

Change-Id: I750e57fb7c5f70e66ad85d19e2c065e9e52a613f
Add a cache to ICU.getBestDateTimePattern.

Brings the time down from 7ms to 7us for a cache hit on Nexus 4.

Bug: 11447043
Change-Id: I7cfc055c264ce49dadc72b5acdc2f2b0b339a5a1