Sync latest Immutable changes
Replace function expression with for loop

isCustomAttribute used an anonymous function in place of a for loop.
Swap it out so we're not allocating unnecessarily.
don't try to use Object.prototype methods as transfer strategies in ReactPropTransferer.mergeProps

While looking up a detail of how `transferPropsTo()` works I noticed that we never check `TransferStrategies.hasOwnProperty(thisKey)` when merging props, just `newProps.hasOwnProperty(thisKey)` and a truthy test for `TransferStrategies[thisKey]`. This means that if our `newProps` has keys like `toString`, `valueOf`, or `constructor` etc. set, we will pull these functions off `TransferStrategies` and invoke them when merging props. In most cases this will just result in a failure to merge and some code without side effects being run but in the case of `valueOf` it will actually generate an exception.
Logging use of objects as maps for children

Let's start logging objects as maps for children. We may want to deprecate this
and replace it with ImmutableMap and Map data structures instead.

This should ideally be logged in the recursive function but since that loses the
scope of where these children are passed it's easier to start tracking them
here to get an idea of how frequently and where it's used.
Separate immutable project

This moves Immutable and Immutable object into the new `immutable` project.