Implements support for updating document subfields and replacing entire documents.

@parkr, @MrNice, @corydobson

This change adds for several features in `update`. First, `update` now supports literal values in the update document, e.g,
```js
db.collection.update({a:1}, {b: 2, $set: {c: 3}});
```
will set `b` to `2` in the matched record.

Second, updating document subfields using dot notation will now work correctly. A query
```js
db.collection.update({a: 1}, {$set: {'b.c': 2, 'd.e': 3}})
```
on a document `{a:1, b: {f: 1}}` will now update it to `{a:1, b: {c: 2, f: 1}, d: {e: 3}}`.

Third, an update document containing no operators (just literal field values) will set the document to those fields, removing all other fields, as [specified](http://docs.mongodb.org/manual/reference/method/db.collection.update/#replace-a-document-entirely). E.g.,
```js
db.collection.update({a: 1}, {a: 2})
```
on a document `{a:1, b: {f: 1}}` will now update it to `{a: 2}`.

And lastly, it adds a check that rejects fields designations in dot notation. E.g.,
```js
db.collection.update({a: 1}, {'b.c': 2})
```
will now fail with the message `can't have . in field names [b.c]`.
Should it also flip the bits, i.e. `return !!/^\$/.test(key);`?