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, a 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.