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.
not totally related to the patch itself --- but it's really hard to understand what we're doing when reading this.

`name !== "("` is confusing, I would rather have a named function which more clearly explains what this is verifying.

`fn[name] !== "var"` is also confusing, using a named function to perform this check would be a lot easier to read.

Not a super-big deal, but it would definitely be good to improve the readability of this code (for the benefit of code review if nothing else)