rewrite block-scoped-var

* fixes #693: block-scoped-var does not respect globals
* fixes #701: block-scoped-var additionally enforcing that declarations come before use
* fixes #702: block-scoped-var considers function expression names as usage, not declaration
* fixes #703: block-scoped-var considers function expression parameters as usage, not declaration