Handle async and overlapping save operations.

Saving has been greatly improved. Saves are now batched per tick. This means that if save is called more than once in the same tick, viceroy transparently batches these save operations in to one save. If a save operation is in progress, and an additional save operation occurs in a following tick, an async save is scheduled. Once the first save operation is complete, the data from that save state is applied to the model, and the a second save begins to save the changes that occurred in overlap of the first save operation. This all happens transparently and should not affect any code in your application.