Add @IterateAsArray annotation support

Compiler hint, when placed on a type that extends
Iterable<T>, all subtypes will be use integer
based loops for Java for-each statements instead
of Java iterators.

Case must be taken to insure that the types
used support O(1) random access, otherwise
this will result in worse performance.

The annotation requires you to specify the
name of the 'getter' method, as well as
the name of the 'length' method. The
signature of the getter must be a single
argument of type integer that returns non-void.
The signature of the length method must be
take no parameters and return integer.

This hint is designed specifically for
JsInterop efficient, do not apply it to your
own code, or to SDK collections unless you
know exactly what you are doing. This transformation
may break code that relies on
ConcurrentModificationException being thrown within an
iterator.

Change-Id: I3c1340916ab748146005e2dd6be285aa16b086c6
Merge branch 'iterate-as-array2' into gwt3prototype