Format a better message for duplicate key violations

Fixes #527.

Not too hard as  the check is done in one place and plenty of support code. 

For reference, here's what various systems output for a simple `PRIMARY` violation:
- Postgres
    - `ERROR: duplicate key value violates unique constraint "x_pkey" Detail: Key (id)=(1) already exists.`
- MySQL
    - `Duplicate entry '1' for key 'PRIMARY'`
- Oracle:
    - `ORA-00001: unique constraint (USER_4_DFEC5.SYS_C00832252) violated`
- SQLite
    - `Error: column id is not unique`

We will now output:
    
    Duplicate key violation for unique constraint `test`.`x`.`PRIMARY`: (1)