ENH: add chainmap for easier scoping
CLN: move scoping code to its own module
ENH: catch key error for chainmap lookups
CLN: give a proper name to generic index resolvers getter
ENH: pass variables to numexpr
CLN/ENH: refactor scope to use DeepChainMap and inspect.stack
TST/CLN: no need to pass scope to eval assertions
CLN/ENH: use swapkey instead of crazy hack
CLN: update expr.py for scope changes and remove unused isexpr
ENH/CLN: track scope instead of hard coding minimal stack level
CLN: no need for property nresolvers
BUG: allow scope usage if resolvers throw a key error but a resolver exists and not a local var
DOC/CLN: add internal docs and remove some straggling cruft
ENH: do not allow users to have variables that are overridden by numexpr
TST/CLN: more extensive scope tests