Change some private visibility of variables to protected
These variables are primarily static/final's, and are save to have access to.  By being protected it might make it easier for some people to extend these classes if needed.  I still prefer that if people need to extend them they file a github issue so we can understand their needs.  In any case I am a firm believer in giving people options.
Moved this "ThreadIterator" anonymous inner class to just an inner class
This provides a performance benifit by not needing to re-build the thread array each time, instead we can reuse a previous array.  This can be very useful when there is a very large thread count.
This also allowed for better unit testing on this functionality.