Maintain full error information where possible.

- Change `deferred:default-errorback': If the error is a cons of the
  form (ERROR-SYMBOL . DATA), re-raise it using (signal ...);
  otherwise convert to an error message using (error "%S" ...)

- Change `deferred:exec-task': Pass errors unchanged to the next
  object in the queue instead of formatting with
  `error-message-string'. Call `deferred:default-errorback' if there
  is no callback and no next deferred object to handle an error at the
  end of the chain.

- Also remove `error-message-string' from `deferred:process-buffer-gen'

- Remove unneeded `default:esc-msg' function.
Minor refactoring of `deferred:exec-task'.

- bind `next-deferred' in the outer let form

- bind `value' in a let form instead of using `setq'
Define `deferred:resignal' and use in `deferred:exec-task' & `deferred:watch'.

- `deferred:resignal' refines the error-raising logic that was in
  `deferred:default-errorback':

  - Emacs conditions represented as conses are re-signaled unchanged

  - strings are raised unchanged using (error ..)

  - anything else is formatted into a string and raised using (error ...)

  It seems better to have a descriptive name for this function since
  it may be needed in several places.

- `deferred:default-errorback' just calls `deferred:resignal'

- `deferred:exec-task' uses `deferred:resignal' on an unhandled error
  at the end of a chain

- `deferred:watch' also uses `deferred:resignal' to re-raise errors in
  its error callback
Simplify `deferred:condition-case'.

If I understand correctly, the `unwind-protect + let' can be replaced
by a single `let' and have a smaller macro expansion.
fixup `deferred:resignal': check that (car err) is a symbol before (get ...)
Merge pull request #7 from joddie/structured-errors

Suggestion: handle errors using Emacs's structured form instead of strings