1105636 - saving a unit through a conduit now fails over to adding or updating

...if a unit appears or disappears unexpectedly.

https://bugzilla.redhat.com/show_bug.cgi?id=1105636

I'm not in love with this pattern of defining the ``_update_unit`` and ``_add_unit`` methods, but I think it is at least reasonable, and it avoids too much restructuring of code late in the 2.4 release cycle.

To summarize, I took the existing method, and I split the ``try`` and ``except`` blocks into their own methods, so they can each fail over to the other.
The 'pulp.server.plugins.conduits.mixins.DuplicateKeyError' could be mocked so that the test runner doesn't require this third party dependency. This is something I've learned with the Celery work because asksolem believes that unit test environments should not require third party dependencies.