Don't eat callback exceptions and preserve delivery_info.

In order to preserve backwards compatability with existing
callbacks (that may live outside of this library) the
delivery_info and signaling flag is passed in the message
payload.

The implication of catching the exceptions in the callback
is that we have to wait for all the consumers to return.
That is, we lose async on the callbacks. Fortunately, this
is only for the consumers that don't want ack_on_error
behavior.

delivery_info is additional message info included in the
message, but was getting dropped previously. This info is
useful to some consumers (like Ceilometer).

Change-Id: I0a7f590d9bdbc158403b7212619a276c44e945f7