Fix: Speed up getScope() (refs #1212)

Instead of `reverse`ing, iterates the `parents` list backwards. Indexes scopes for direct random lookup rather than searching through them linearly.

`npm run perf` before and after:

```
CPU Speed is 2200 with multiplier 7500000
Performance Run #1:  1883.021533ms
Performance Run #2:  1865.9190469999999ms
Performance Run #3:  1856.122294ms
Performance Run #4:  1871.876902ms
Performance Run #5:  1854.4841139999999ms
Performance budget ok:  1865.9190469999999ms (limit: 3409.090909090909ms)
```

```
CPU Speed is 2200 with multiplier 7500000
Performance Run #1:  1579.674679ms
Performance Run #2:  1637.630723ms
Performance Run #3:  1578.9458220000001ms
Performance Run #4:  1569.7571480000001ms
Performance Run #5:  1575.484874ms
Performance budget ok:  1578.9458220000001ms (limit: 3409.090909090909ms)
```

In `npm run profile`, `getScope` dropped from 6.23% of total time down to 0.38%.

In a separate local branch, I added some code to track processing time consumed by each rule. `no-unused-vars` is still the slowest rule by a large margin, but this change reduces it from 35% of total rule time down to 22% (those numbers on `tests/performance/jshint.js`).
I would prefer something more like

> Named function expressions create two nested scope objects. The outer scope contains only the function expression name. We return the inner scope."

It is not some arbitrary escope design decision, but a model used in the ECMA262 specification itself.