Stop Mutating Merged Lifecycle Results

Summary:
Currently, `ReactCompositeComponent` mutates values returned by `getDefaultProps`, `getInitialState`, and `getChildContext`. This is bad because the objects may, for example, be cached and re-used across instances of a React component.

This changes `ReactCompositeComponent` to instead create a new object. In return for allocating a new object, I've replaced `mapObject` with `forEachObject` so that we are no longer allocating an unused object.

Fair trade, IMO.

Test Plan:
Ran unit tests successfully:

```
npm run jest
```
Hmm... shouldn't this be `!(key in one)`? Keys with the value of `undefined` have feelings, too.