SI-8835 Fix implementation of Iterator drop to remove quadratic behavior

The Iterator drop method (defined in Iterator.scala) generates nested anonymous classes. When drop is used in a loop, this causes linear traversal to become quadratic, and will also eventually cause a stack overflow if invoked sufficiently many times.

I wrote up a description and analysis of the problem here:
http://erikerlandson.github.io/blog/2014/09/03/matryoshka-class-construction-from-the-scala-iterator-drop-method/

This isn't going to be binary compatible.  You're inviting people to override it with protected, but if they do and then use 2.11.2...BOOM!  private[collection] is better...someone else will have to comment whether this is good enough.  Also, how did you tell that you overrode delegate everywhere that was needed?  I get a little nervous when 23 of something change.