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.
This test does not do what you think it does. `reload` only updates the attributes from what is in the db. You are still working from the same object. Error will not be present when the job is looked up from the db.