Add _.assign function

@megawac [mentioned](https://github.com/jashkenas/underscore/pull/1907#discussion_r19318553) creating an alternative to `_.extend` but only adding own properties named `_.assign` to align with `Object.assign`. There wasn't an issue or pull request anywhere so here it is.

Since the 2.0 plan is to align `_.extend` with ES6's `Object.assign`, I can imagine this would just become an alias to extend.

I've created `baseAssign` here so that [other functions](https://github.com/jashkenas/underscore/pull/1907#discussion_r19317971) can take advantage of it. 

This implementation is a slimmed down (albeit less-performant) version of the one seen in lodash. Thanks @jdalton.
Also test array-likes as discussed earlier -- `_.assign({a: 1, 0: 2, 1: "5", length: 6}, {0: 1, 1: 2, length: 2});`