.save() uses transaction.atomic instead of savepoints

ready to review?: Yes. 

Explained in more detail than you want or require here https://code.djangoproject.com/ticket/21134#no1

TL;DR Use transaction.atomic() instead of transaction.savepoint() and transaction.rollback() in Django 1.6 when you expect to continue and do something useful after a DatabaseError (or in this case a more specific IntegrityError)