Merge error data after message

This makes it more human-readable: error message first, ancillary data
later (e.g., development stack traces).

The implementation here does have the side effect of losing the main
message when data contains a "message" key (rather than the previous
behavior, which always prefers the "message" argument to a hash value.

In the end, this change could be seen as desirable, if you want to, for
example, pass nil to the argument under the assumption that a "message"
key is always present in the data hash.

Signed-off-by: Stephen Celis <stephen@stephencelis.com>