Hide Object.assign polyfill behind a module

Because the JS community's polyfilling infrastructure sucks and we'll
have to fix it for them before we require this.

JSX spread uses React.__spread
(which might get special behavior for key/ref, not sure yet)

This never uses the native implementation and throws for prototype chains.
Once the native implementations are faster, we'll start using them.
This is totally theoretical and probably not worth it now, but I imagine the code below would be faster for native `Object.assign` implementations?

```
var reuseArray = [];
...
reuseArray[0] = destination;
var argLength = propertyObjects.length; 
for (var i = 0; i < argLength; i++) {
  reuseArray[i + 1] = propertyObjects[i];
}
assign.apply(null, reuseArray);
reuseArray.length = 0;
```