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.
Merge pull request #2350 from sebmarkbage/assign

Hide Object.assign polyfill behind a module