Distinguish between new and bounced messages

Messages that were bounced by the batcher without being sent were coming back
with a nil error, which made them indistinguishable from *new* messages, so they
were ending up in the backlog instead of the requeue. Fix that by adding a
transient "bounced" error type.

Also rename the other errors to reset and shutdown. Naming is hard.