generate fresh identifiers

Fixes #2. Depends on #5 (though it doesn't really need to, I just thought it would be easier to base off that when I started).

/cc @Constellation. Just wanted you to check out my usage of escope, make sure I'm not doing anything stupid. `inScope` looks to be working for me with each identifier in this test:

```javascript
var okayToBeShadowed, cannotBeShadowed;
   
function count(from, to) {
  if(from >= to) 
    return from;
  externalFn(cannotBeShadowed, __to);                                             
  return count(from + 1, to);
}  
   
console.log(count(0, 1000000));
```