sensible update_fields behavior

Excluding `version` from `update_fields` should still check the version,
but should not update it.

Includes tests for this behavior on all types of models, including a
failing one based on limitations on django's _do_update.