`shift` is actually the slowest of those by far.  Index iteration, it seems, is the way to go, in terms of performance.  This is a bit surprising to me, since I had assumed that `shift` would have some very clever, highly efficient implementation that was perfect for our purposes. 

However, I'm not convinced yet that iteration of agents is something where we should be favoring speed over clarity.  The agent model and the code that the agents are running have been our two major sources of bottlenecks thus far.  Do we have any reason to believe that speeding up iteration of `Iterator` will have any substantive effect on performance?  On the other hand, how clear is the meaning of `array.shift()` to people? 

> `pop` and `shift` are faster in older browsers, but regular index iteration is now faster.

This project has always been about building a version of NetLogo that runs in modern browsers.  I think that, when checking benchmarks, we should (for now) favor the benchmarks of more-recent browser versions.

> Also, behaviorally what do we want? Copying the array does mean it's basically safe to mutate in the middle.

I think the `Iterator` ought to copy the array.  Not necessarily so that `Iterator` can mutate it safely, but to guard against the passed-in array being mutated elsewhere.  This is good for within the engine, but, additionally, there has to be some copying that goes on _somewhere_ if we want the engine to be sanely usable by third parties from within JavaScript.

It's not as if we're creating a lot of `Iterator`s, either.  The only place they're currently instantiated is in preparation for executing `ask` blocks.  So, again, I think the overhead of copying the array is unlikely to be a substantial source of slowdown.