Switch get_encoding_kcode_fallback to return an Encoding object
Start refactoring for allowing multiple compiled regexps

This is the first step to allowing multiple compiled regexps to be
cached. For example in Rails it happens very often that regexps are
recompiled all the time. This is because they are compared with
US-ASCII, UTF-8 and ASCII-8BIT strings.

This cache will have dedicated slots for these three types and a fourth
slot for other encodings which are much rarer.
Setup caching for US-ASCII, UTF-8 and ASCII-8BIT encodings

This improves Regexp handling performance by making sure we cache
potentially multiple version of compiled regular expressions for
different encodings.

This prevents large amounts of recompilation of regular expressions,
especially on things like Rails where the safe buffer handling runs
against strings of different encodings.

The performance impact of this gets heavier and heavier under concurrent
load, since now multiple threads recompile the same regexp and contend
on that. These different caches remove almost all of that overhead. This
could end up costing around 3% of total runtime on a test Rails app,
which dropped to 0.5% for matching on regular expressions.

A benchmark showing this problem improved significantly:

Before:
=== bin/rbx ===
Regexp#match on same strings
                      4462802.5 (±0.9%) i/s -   22305129 in   4.998464s
Regexp#match on changing string encodings
                       257463.1 (±6.5%) i/s -    1282537 in   5.002924s

Aftern/rbx ===
Regexp#match on same strings
                      4313785.9 (±3.4%) i/s -   21506726 in   4.992320s
Regexp#match on changing string encodings
                      1759443.4 (±0.9%) i/s -    8842288 in   5.026072s
Add benchmark demonstrating Regexp performance issue