That doesn't need a name either (in fact even less so, since it never ends up in the registry).
Merge bug25044  (fa1429850857)
optimise
drop expired messages post basic_get
...so messages with an expiry that are at the head of the queue after
a basic.get do not get stuck there in the absence of other queue
activity.

Rather than simply adding a call to drop_expired_messages/1 after the
call to fetch/1 in the basic_get code, we insert the call into
fetch/1, which allows us to remove it from the other call site. Thus
fetch/1 preserves the invariant we are after, namely that whenever a
queue has a message at the head with an expiry, there is a timer set
to drop said message.

Note that the message count returned by basic.get does not reflect the
dropping of expired messages after the fetched message. That's ok
since we make no guarantee that messages are expired straight
away. And note that on 'default' (rather than 'stable') the behaviour
is actually different; due to various other changes there we will in
fact return the reduced count.
Merge bug25448
stable to default
Today's arbitrary startup banner change: centre the rabbit.
don't invoke run_message_queue in handle_cast/run_backing_queue
Since that would only be necessary of the BQ:invoke modified the
consumers, which it can't, or added messages to the queue, which it
shouldn't.
drop_expired_msgs only when the queue head changes
And on recover. And when the timer goes off. That's all we need.

new call sites:
- in deliver_or_enqueue/3, when enqueuing a message (that we couldn't
  deliver to a consumer straight away) with an expiry to the head.
  the queue. NB: Previously we were always (re)setting a timer when
  enqueuing a message with an expiry, which is wasteful when the new
  message isn't at the head (i.e. the queue was non-empty) or when it
  needs expiring immediately.
- requeue_and_run/2, since a message may get requeued to the
  head. This call site arises due to removal of the
  run_message_queue/1 call site (see below).

unchanged call sites:
- init_ttl/2 - this is the recovery case
- fetch/2, after fetching - this is the basic "queue head changes"
  case
- handle_info/drop_expired - this is the message expiry timer

removed call sites:
- run_message_queue/1 - this internally calls fetch/2 (see above) but
  also invoking drop_expired_msgs at the beginning. This now happens
  at the call sites, where it is necessary. Which actually only is in
  requeue_and_run, and not the others, none of which change the queue
  content prior to calling run_message_queue/1
  - possibly_unblock/3 - unblocking of consumers
  - handle_call/basic_consumer - adding a consumer
- handle_call/basic_get, prior to the call to fetch/2.
- handle_call/stat
Merge bug25451
remove superfluous vqstate field
merge heads
merge default into bug23749