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
```
This is an unnecessary abstraction. Use Object.keys(object).forEach or just inline the for...in. It makes it easier to read the code without learning all our utilities.