Use ScheduledExecutorService to send relay pings
Refactor PongHandler

* Use synchronized methods to simplify wait/notify.
* AtomicLong use now unnecessary due to synchronization.
* Fix bug where waitForPong may wait longer than timeout.
Refactor LastMessageHandler