rationalise timer maintenance
- introduce a couple of helper functions and use them wherever we can
- pay attention to the result of timer cancellation, to prevent
  duplicate timer creation
- stop all timers when a queue terminates. More out of politeness than
  necessity.
make check_xref work when plugins dir is empty
optimising refactor of check_xref
some more reader connection state abstraction
and a slightly more logical (and efficient) handle_frame clause order
...and do the same thing here.
Merge bug25393
remove superfluous condition
cosmetic
Prevent explosion if someone passes a list.
Merge bug25401
stable to default
merge bug25400 into default
simplifying refactor on rabbit_mnesia:discover_cluster
merge default into bug25397
various reader related changes for AMQP 1.0
- mechanism for the reader to 'become' a different reader.
- become the 1.0 reader if an AMQP 1.0 header is presented by a client
  and the reader is present. That way we can support 1.0 on the same
  port as 0-{8,9,9-1}.
- defer starting of the channel_sup_sup and do that in the
  reader. This allows the AMQP 1.0 reader to start its own versio of
  the sup. It also makes aborted connections less costly.
- track connections in an ets table rather than implicitly via the
  supervisor. That way AMQP 1.0 connections can exclude themselves,
  since they are already tracked via their direct connections.
fix test
connections only show up in 'list_connections' after the protocol
header has been sent
merge bug25383 into default
cosmetic
tiny refactor on variable_queue_with_holes
cosmetic