Only update timestamps on successful saves

When using `save()`, the `created` and `modified` fields can be set to new values. The fields should only be updated when the save is successful. This can be done by assigning the values to the internal document after the save.

This is made possible by catching any exception raised by `_update()` and raising it again. Why is this done? Because the assignment to the internal document happens in the try's `else` block.
Remove unnecessary trip to the database when using save_fields()

`Model._update()` uses `find_one()` to reload changed fields when performing an atomic update. With `save_fields()` this is unnecessary because the values are coming from the internal document. Unlike the other atomic update methods, `save_fields()` sets `use_internal` to `True`. Because `use_internal` indicates that the values are already in the internal document, the call to `find_one()` can be skipped.