Cleanup of slug-setting and catch duplicate users

Changed the way that the slug setting routine was called. No longer
using a constructor hook, but rather calling ModelBase.set_slug()
explicitly on both creation and update.

These changes uncovered a bug on procession.db.api.user_update() that
was not catching updates to user name for integrity constraint
violations on the slug or user name columns, so this patch adds a test
for that condition.