Assign the error object to the job on failure

Replaced `job.last_error = "...error message..."` with `job.error = error` since it is more flexible. It allow devs 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 backends.

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.
Oh you are right. I don't actually need to reload since we don't want to test if the error object is persisted, but only assigned to the original job object.