Replaced AbstractKey.save() with a signal handler

Previous implementation of save() meant that failure would occur if kwargs contained
force_insert=True . This would result in the insert being attempted twice and failure
due to primary key violation.