Merge pull request #15561 from ktoso/master

=act #13970 Send transistion on goto(CurrentState) in FSM
!act #13490 Changed the callback to SocketOption to accept a channel instead of a Socket, this allows for using the nio features.

For example in Java 7 you can now join a multicast group:

case class JoinGroup(group: InetAddress, networkInterface: NetworkInterface) extends SocketOption {

  override def afterConnect(c: DatagramChannel): Unit = {
    c.join(group, networkInterface)
  }
}

  IO(Udp) ! Udp.Bind(self, new InetSocketAddress(MulticastListener.port),
    options=List(ReuseAddress(true),
      JoinGroup(MulticastListener.group, MulticastListener.interf)))

Other minor changes:

 - changed all methods in SocketOption to take a Channel instead of a Socket.  The socket can be gotten from the Channel but not the reverse.
 - all methods that are called before the bind are now called beforeBind for consistency.
 - All network connections now call the beforeBind and afterConnect.
=per #15575 lessen timing issue in AtLeastOnce spec

* lower redelivery interval does not change semantics here (no one
  answers anyway), and lessens the changes to be "unlucky" with gc pauses
* was unable to reproduce error with snapshotting in 80 builds on
  jenkins. Brainstormed possible errors but not found yet..
=per #15559 use the same config as all other peristence tests

* this includes the default expect timeout of 10s (instead of 3s)
=con #15574 impr TimerBasedThrottlerSpec stability

* the lower bound was rather racy, depends on "where in it's Tick"
  time the throtteler currently was. In general the upper bound is also
  not exact, but "good enough" because the `.5` is an estimation of "the
  throtteler must finish it's previous tick, and then it sends the data"
Merge pull request #15586 from ktoso/forward-port-test-hardedning-ktoso

For Validation, 3 test hardening commits from release-2.3
Merge pull request #15568 from HawaiianSpork/socketOptionAfterConnect

!act #13490 Changed the callback to SocketOption to accept a channel instead of a Socket, this allows for using the nio features.
=act #15572 don't read recursively in pullMode when a complete buffer was read
Merge pull request #15573 from spray/w/fix-TCP-pull-mode

=act #15572 don't read recursively in pullMode when a complete buffer was read