Fix incorrect readbehind and try to make readahead clearer and easier. (#8691)
* Use MonoOpcodeEnum instead of int. Provide MonoOpcodeEnum_Invalid = -1.
* Fix and cleanup bounds checks.
Some were off by one, some could be clearer.
This pattern will go away anyway and is partly gone below.
* Prepare to fix incorrect read behind.
* Add test to hit assert in incorrect readbehind in ldvirtftn.
* Confuse the JIT (or runtime) into crashing.
* Fix parens.
* Move some macros from verify.c to verify-internals.h.
* Attempt to make IL readahead easier to understand, by having
less spread out instruction sizing and decoding.
This converts several readaheads but not all.
It is possible we should just convert to a large array of pointers,
and then do these optimizations.
This also fixes the incorrect readbehind.
* Disable new test. Fixing the readbehind fixes the assertion failure but still sigsegvs later in trampoline.
* More use of common code. More to do here.