Improve Map feature check.

This helps us to avoid hitting legacy Map implementations
that use different iteration protocol (i.e. Firefox 24).

Change-Id: Ie6542e4c6fba4bb23fc63c7a9bcf4f256bce73b5
diff --git a/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java b/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java
index e4e5598..63f98ba 100644
--- a/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java
+++ b/user/super/com/google/gwt/emul/java/util/InternalJsMapFactory.java
@@ -25,7 +25,16 @@
   private static final JavaScriptObject jsMapCtor = getJsMapConstructor();
 
   private static native JavaScriptObject getJsMapConstructor() /*-{
-    if (typeof Map === 'function' && Map.prototype.entries) {
+    // Firefox 24 & 25 throws StopIteration to signal the end of iteration.
+    function isCorrectIterationProtocol() {
+      try {
+        return new Map().entries().next().done;
+      } catch(e) {
+        return false;
+      }
+    }
+
+    if (typeof Map === 'function' && Map.prototype.entries && isCorrectIterationProtocol()) {
       return Map;
     } else {
       return @InternalJsMapFactory::getJsMapPolyFill()();