Reduce cost of repeatedly invalidating global variables.

* Mark all variables as GLOBAL, THREAD, or FRAME scoped
* Only perform indy caching for GLOBAL
* Failover to direct access every time after 100 failures
* Add a failover invalidator that eventually stays invalid

In order to avoid the impact of invalidating global variables that
are modified continually during the run of an application, I've
added a config parameter (invokedynamic.global.maxfail) to fail
those variables and not continue caching them using invokedynamic
and a SwitchPoint. On the update side, I added a new Invalidator
called FailoverSwitchPointInvalidator that eventually gives up and
stays invalid, since even invalidating an unused SwitchPoint is
rather expensive.

With these changes, highly-volatile global variables perform as
well as without invokedynamic, rather than much slower.