CLN: Change assert_(a is [not] b) to specialized forms

Work on #6175. Changes instances of assert_(a is [not] b) to specialized assertIs[Not](a, b).
Merge pull request #6392 from bwignall/assert_6175_isisnot

CLN: Change assert_(a is [not] b) to specialized forms
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
ENH: update pytables for new scoping
ERR/API: disallow local references in top-level calls to eval
CLN/API: move check for @ syntax (with engine) into _check_for_locals