Assign the error object to the job on failure

Replaced `job.last_error = "...error message..."` with `job.error = error` since it is more practical. It allow dev to store the error in their own format and failure hooks to use the job object to retrieve the error and report it properly.

`Job#error=` is a bit hacky and call `last_error=` to keep everything backward compatible, but I can remove it if you think it is ok to break current backend.

A properly way to do it would be to define the `last_error` (Or column name used to store error message) in the backend and create a message from the error attribute.