Updates Temporal to save revisions correctly when `save()` is called multiple times per request.

Temporal's save logic for when models are not new was fully rewitten. Now instead of saving the new information as a new model the old data is inserted as a new row and the current row is saved with the new information. This means that the model object that `save()` is called on will always point to the most recent revision in the DB.

Proper comments where also added with the correct copright and author information.