Don't raise W083 if a function never touches the outer scope

**W083** warns you against using functions within loops, however, it generates a lot of false positives. This patch reduces the number of false positives by checking whether functions access non-local variables. If a function uses only its local variables, then it is safe to be used within loops:

```javascript
for (var i = 0; i < 10; i++) {
  // This is pretty safe and shouldn't generate W083.
  doSomething(function () { console.log("Hello"); });
}
```

The crux of this implementation is in and around the **isNotLocal** function. **doFunction** returns an object representing the function it just parsed. This object has two types of properties: special properties that start with `(` (e.g. `(scope)`) and all the variables used within that function, by name. Each variable has a value that constitutes its type: **global**, **outer**, **var**, etc. We're interested in **var** because it signifies local variables.
it might have been sufficient to just explain in comments that that's what these were doing when it was a single closure --- but it's fine this way too.