Merge pull request #114 from kapetan/upstream

Normalize callback arguments. Same as shell.
Change normalized callback arguments.

After this commit the callbacks for the write functions are as follows.

```
db.users.insert(document, callback);    // => callback(err, [document])
db.users.save(document, callback);  // => callback(err, document)
db.users.update({ ... }, { ... }, callback); // => callback(err, lastErrorObject)
db.users.remove({ ... }, callback); // => callback(err, {n: amountRemoved})
db.users.findAndModify({ query: { ... }, update: { ... }}, callback); // => callback(err, document, lastErrorObject)
```

The reason for these changes is that sometimes you might want to save a document and retrieve the
ObjectId it was saved with.

The problem of `save` returning '1' when the operation was an update is solved
here, and a test case was added for this as well.
Add a remove statement to the insert test case.
Add the lastErrorObject to the .save callback. Now the callbacks are as following.

db.users.insert(document, callback);    // => callback(err, [document])
db.users.save(document, callback);  // => callback(err, document, lastErrorObject)
db.users.update({ ... }, { ... }, callback); // => callback(err, lastErrorObject)
db.users.remove({ ... }, callback); // => callback(err, {n: amountRemoved})
db.users.findAndModify({ query: { ... }, update: { ... }}, callback); // => callback(err, document, lastErrorObject)
Change the insert callback to make it more intuitive.

- If the function was called with an array, the callback will have an array (even if the array had one element).
- If it was called with an object, the callback will have an object.