readAckList() updated. Previously values read from the stream were not actually being added to the returned list, causing ackLists to appear empty on all nodes that were not the source of a message
removeStaleLatencies() updated to prevent concurrentModificationExceptions
The handling of placeholders in the buffer and when handling placeholder requests have been corrected.  Previously placeholders were being ignored in some edge cases.  Furthermore, these classes no longer use the default thread pool for timing, but rather the timer threads.
Timer pool is now used to handle timing events, not the main threadpool.  Thread.sleep() calls have been replaced with the provided Util.sleep() method and old comments have been removed
The timer thread pool is now used for timing events. When sending messages, a dedicated runnable is no longer used, instead the current thread executing the request sleeps.  This was because the creation of a runnable for each message broadcast was becoming a bottleneck for throughput