Performance optimization - Iterator span, collect, dropWhile
Performance optimization - Iterator span, collect, dropWhile

Rewrite of span to avoid double-indirection of `.buffered` and to avoid use of `mutable.Queue` unless it is absolutely necessary.  Rewrite of `span` and `dropWhile` to also avoid `.buffered` (less DRY but single vs. double indirection and object allocation).

Performance improvements:

```
method        reason
===========   ===============================================================
collect       2.3x faster on small collections, 1.5x on large

span          1.6-1.7x faster on small collections
              0.85x-1.8x slower/faster on large collections
                depending on how much must be cached (0.85x all, 1.8x none)

dropWhile     1.2x faster on small collections, half the garbage
```

shimib/scala,scala/scala,jvican/scala,lrytz/scala,jvican/scala,martijnhoekstra/scala,scala/scala,slothspot/scala,scala/scala,jvican/scala,lrytz/scala,lrytz/scala,felixmulder/scala,scala/scala,felixmulder/scala,shimib/scala,slothspot/scala,slothspot/scala,scala/scala,martijnhoekstra/scala,slothspot/scala,lrytz/scala,felixmulder/scala,martijnhoekstra/scala,martijnhoekstra/scala,shimib/scala,jvican/scala,shimib/scala,jvican/scala,slothspot/scala,martijnhoekstra/scala,shimib/scala,shimib/scala,slothspot/scala,slothspot/scala,scala/scala,jvican/scala,jvican/scala,felixmulder/scala,felixmulder/scala,lrytz/scala,felixmulder/scala,felixmulder/scala,martijnhoekstra/scala,lrytz/scala