Proposal to extend IntegrityError
Eeee, yeah, this seems like a can of worms I'd rather not open. I'm going to stick with the ones specified by the DB-API 2.0 spec.

https://www.python.org/dev/peps/pep-0249/#exceptions
 Agreed, makes sense to stick by DB-API 2.0. For all other engines/versions, we can just inspect `exc.args[0]` to get the error code, but for Sqlite3 on Python 3.4 we'll just have to wait heh.

As a follow up to #443, I'm proposing that IntegrityError should expose some information about the error its representing. For example, if the error was related to a unique constraint failure, perhaps we could have a subclass representing this (`UniqueConstraintError`?).

It seems this is detectable inside `exc.args`, e.g;

```
('UNIQUE constraint failed: useremail.user_id, useremail.email_address',)
```

It seems that most databases will return an error code, rather than having to do a string comparison.

```
SQLITE_CONSTRAINT_UNIQUE (2067)
MySQL: ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'
```

I think that unique constraint failure is a good candidate for this, at the very least to reliably implement `create_or_get()` type functionality.

On a side note - it seems that there is a [bug](http://bugs.python.org/issue16379) with Python 3.4 that prevents Sqlite error codes from reaching Python

Thoughts?
