Ability to identify timeout errors

Allows `Q.timeout` message to be a custom `Error` object or sets `error.code == 'ETIMEDOUT'`.

Fixes #513