strscan specs for multibyte strings
use bytesize instead of size anywhere in strscan

to implement mri-like behavior for multibyte strings
Merge pull request #2122 from tank-bohr/master

use bytesize instead of size anywhere in strscan for correct work with multibyte strings
Update pre-installed FFI gems with upstream fix.
DO NOT re-enable Ruby finalizers until fixed.
Load llvm-as and llc from PATH
Remove old LLVM types file
Introduce new data structure that the JIT needs access to

The JIT needs to be told about certain fields so we can do faster checks
for whether we have any interrupts scheduled or the stack overflows.
This refactor allows for teaching the JIT about this structure without
having to know the total VM layout, which is fairly complicated.
Update LLVM type information for new VMJIT information
Use run_gc_soon method
Make interrupt checks in the JIT cheaper

We use the new VMJIT structure to read whether we have an interrupt
scheduled for this thread and check the status of whether we have to GC
from shared state.

Improves performance of for example Integer#gcd, because that checks
interrupts in the loop.

Before:
=== ./bin/rbx ===
Fixnum gcd Fixnum => Fixnum
                      3232489.4 (±3.7%) i/s -   16153410 in   5.004410s

After:
=== bin/rbx ===
Fixnum gcd Fixnum => Fixnum
                      3846171.8 (±2.4%) i/s -   19263285 in   5.011503s
Add benchmark for Integer#gcd
Cleanup pending background requests

When we shut down, cleanup pending background requests that haven't been
executed yet.
Fix a number of warnings exposed by http://clang-analyzer.llvm.org

This fixes a number of issues that are either actual issues or trivial
to fix / change.
Only allocate space when it's actually needed

Allocating 0 bytes is undefined behavior and we don't need it anyway in
those cases.
Fix control flow bug in tooling interpreter

Fixes #2116
If the symbol is the null string, we would read an invalid byte

When the symbol string is a null string, we would read the byte at
position -1, which is invalid for the string. So we need to check
whether last is actually a valid string offset here.
Reworked finalizers.

The objects to be finalized are now grouped into "generations." All the
objects in a generation are kept alive until all the finalizers are run.

The Ruby finalizers are run first, then the C finalizers, and finally, the
objects are "released", which primarily involves cleaning up handle-related
aspects.

The Ruby finalizers are run first so that any objects that are being finalized
can access other objects that were alive at the same time they were alive.

Once all the objects in a generation have been processed, the list of objects
is dropped. Since the objects are kept alive by the list they are a member of,
all objects in a list that is dropped before the next GC cycle will be
collected in that cycle.
Fixed collecting handles.

A mature GC can run when no young GC has run. The handle cleanup code only
considered young objects when a young GC had run, thereby cleaning up handles
for young objects that necessarily must still be alive (since no GC ran for
the heap they were in).
Ignore finalizers when finishing finalizers.

The FFI gem creates new objects to call a function. When Ruby finalizers are
run at shutdown, calling that function creates new Data objects which have
finalizers.