API: Improve error reporting

This patch improves API errors messages thus fixing some issues (#6878, #3526, #4209, #5335).

`404` statuses have been replaced by omre precise ones:
* `409` when there is a conflict
* `400` when a validation problem occurs

Validation errors are also exposed in API responses.
how does this look like for more than 1 message? What about `model.errors.full_messages.join(', ')?