'Some of the heavy lifting happens here.  There are two saving scenarios:
(a) We are saving an imported model.
In this case, we need to make sure that the data check out (but nothing we mark on the object)
(b) We are saving our own model
In this case, we need to mark the model with appropriate fields, so that
it can be sync\'d (self.counter), and that it will verify (self.signature)'

def save(self, imported=False, increment_counters=True, sign=True, *args, **kwargs):

    if imported:
        if (not self.signed_by_id):
            raise ValidationError('Imported    models    must    be    signed.')
        if (not self.verify()):
            raise ValidationError('Could    not    verify    the    imported    model.')
        super(SyncedModel, self).save(*args, **kwargs)
        if increment_counters:
            self.signed_by.set_counter_position(self.counter, soft_set=True)
    else:
        own_device = _get_own_device()
        if increment_counters:
            self.counter = own_device.increment_counter_position()
        else:
            self.counter = None
        if sign:
            assert (self.counter is not None), 'Only    sign    data    where    count    is    set'
            if own_device.is_trusted():
                self.zone_fallback = self.get_zone()
            self.sign(device=own_device)
        else:
            self.set_id()
            self.signature = None
        super(SyncedModel, self).save(*args, **kwargs)
