Allow iterables in traverseAllChildren

This lets you use any kind of iterable as a container of react child elements. It also preserves keys when possible if the iterable is keyed.

 * Use an ES6 Map or Set to hold children.
 * Use an Immutable-js collection to hold children.
 * Use a function* which yields children.

Concretely, this removes the necessary conversion to JS objects if you're mapping over Immutable-js collections to get children, i.e.:

```
<div>
  {myImmutable.map(val => <span>{val}</span>).toJS()
</div>
```

Now we can remove the `toJS()` and the intermediate allocation along with it.
This is really just a defensive safety check for bad iterators. By the spec, entry should *always* be a [k, v] tuple unless `done` is true, however I don't want React reconciliation to die if someone passes in a shitty non compliant entries iterator. 

Since this check is cheap, I figured it was better to err on defensive.