Improve Regex performance (mainly interpreted) (#449)
* Remove branches from tight inner interpreter loop in FindFirstChar
* Tweak RegexBoyerMoore.IsMatch
Reduce the checks needed and elimiate unnecessary layers of function calls.
* Remove IsSingleton optimization
This doesn't show up in real regexes and is just adding unnecessary complication to the code. No one writes `[a-b]`... they just write `a`. SingletonInverse is more useful, as you can search for any character except for a specific one, e.g. find the first character that's not a dash.
* Cache CharInClass results for ASCII lookups
* Improve codegen in a few places (and a little cleanup)
* Mark RegexInterpreter.SetOperator aggressive inlining
It's small but isn't getting inlined; it's only called in 4 places, but on hot paths, and inlininig it nets around an ~8% throughput win.