Feature - Change `Model.set()` to perform both additions and removal of model attributes, remove `unset()`

In the current implementation of `Model.set()`, it is not possible to do a combined set/unset operation. That is, an operation that will remove keys with `undefined` values from the `Model`, while in the same call setting keys with values.

For example, a user wishes to update a `Model`'s attributes. They want to unset a value and set another and do something with the `changedAttributes()`. Currently, they would do that something like this:
```javascript
var current = new Backbone.Model({ "foo": "bar" });
current.unset("foo");
console.log(current.changedAttributes()); // { "foo": undefined }
current.set("baz", "bar");
console.log(current.changedAttributes()); // { "baz": "bar" }
console.log(current.attributes); // { "baz": "bar" }
```
Currently, it is not possible for the user to capture a single `changedAttributes()` object that summarizes both changes as it is impossible to set and unset at once.

~~I would like to propose a flag to allow such an operation. Consider the following example where `compact` is the proposed flag:~~
```javascript
// DISREGARD THIS BLOCK! Left for historical reasons.
var proposed = new Backbone.Model({ 'foo': 'bar' });
proposed.set({ 'foo': undefined, 'baz': 'bar' }, { 'compact': true });
console.log(proposed.changedAttributes()); // { 'foo': undefined, 'baz': 'bar' }
console.log(proposed.attributes); // { 'baz': 'bar' }
```

I would like to propose that `unset()` be removed and the behavior of `set()` be altered to add model attributes with values other than `undefined` and to remove model attributes with values of `undefined`. Consider the following example:
```javascript
var proposed = new Backbone.Model({ 'foo': 'bar' });
proposed.set({ 'foo': undefined, 'baz': 'bar' });
console.log(proposed.changedAttributes()); // { 'foo': undefined, 'baz': 'bar' }
console.log(proposed.attributes); // { 'baz': 'bar' }
```

I realize the current behavior is intentional and for consistency as pointed out in #879. However, there are currently several outstanding issues surrounding `Model.set()` and `changedAttributes()` so I feel there is something lacking in the current implementation. See #2301 for one part of the conversation.

Thank you for your time, consideration, and such a great open source product. Cheers!