Use GCData pointer instead of reference

This is needed because we want to manage this outside the stack later
for concurrent GC. In that case we need to store the GCData on the heap
so the concurrent thread can use it.

Therefore we replace this in advance, so the change for concurrent GC
can be smaller.
Pass down STATE into collect_young and collect_mature

For concurrent GC we want to have access to it to start the marker
thread. Also updates the VM tests and fixes some test cases to really
test something properly.
Move definition of mark_ down for better compaction
Use existing timers instead of an additional custom one

We already have timers for the collection time duration, so we might as
well use those instead of keeping time manually here.
Remove unused stats instrumentation
Don't go through write barrier if not necessary
Remove unnecessary casts and use force_as where possible
Merge pull request #2374 from razielgn/capi-rb_enc_codepoint_len

Implemented CAPI rb_enc_codepoint_len.
Updated MSpec source to 1343524a.
Improve type checks and add support for Float and Bignum

This reverts commit fbc9754397fb0c6369c4ddc299e7fbbf02b673d1 too,
because we now always store type bits inside the object so that fix
isn't necessary anymore.

The addition for Float and Bignum was based on some benchmarks using for
example Numeric#step, which checks against Float and String#* which
checks against Bignum.
Remove usage of &block in cases where it's not needed

This would capture into a Proc, for which we set the lock bit because it
might be used across threads. This causes slower local access. This
removes the creation of the Proc for cases where we don't need it
anyway.
Simplify implementations of Fixnum#<< and Fixnum#>>
Add benchmarks for shifting outside Fixnum range
Add JIT support for Fixnum#<< and Fixnum#>>

This uses the same simplified check mechanisms as the simplified
primitive logic. Also only works by default on positive numbers and
falls back to the primitive implementation for a negative receiver or
argument.

Benchmarks
==========

Before:
benchmark/core/fixnum/bench_left_shift.rb
=== bin/rbx ===
     left shift by 1 77601999.0 (±2.8%) i/s -  387553362 in   4.998034s
     left shift by 8 78609163.4 (±3.0%) i/s -  392360256 in   4.996938s
    left shift by 16 78534804.2 (±9.8%) i/s -  387003800 in   4.994741s
    left shift by 32  9135218.6 (±1.7%) i/s -   45775530 in   5.012402s
    left shift by 64  7145894.9 (±0.7%) i/s -   35863800 in   5.019027s

benchmark/core/fixnum/bench_right_shift.rb
=== bin/rbx ===
    right shift by 1 91321138.7 (±3.5%) i/s -  455555848 in   4.996689s
    right shift by 8 91187007.4 (±2.8%) i/s -  455497321 in   4.999472s
   right shift by 16 93562460.5 (±2.6%) i/s -  467401128 in   4.999379s
   right shift by 32 91045769.1 (±3.0%) i/s -  454763943 in   4.999677s
   right shift by 64 96346103.0 (±2.9%) i/s -  481247721 in   4.999311s

After:

benchmark/core/fixnum/bench_left_shift.rb
=== bin/rbx ===
     left shift by 1 266359413.5  (±5.9%) i/s - 1323845154 in   4.992531s
     left shift by 8 266910894.1  (±5.6%) i/s - 1328187750 in   4.995615s
    left shift by 16 245329568.6 (±11.2%) i/s - 1207890156 in   4.994857s
    left shift by 32  11048101.9  (±3.7%) i/s -   55179454 in   5.003289s
    left shift by 64   8117302.4  (±4.8%) i/s -   40605883 in   5.015349s

benchmark/core/fixnum/bench_right_shift.rb
=== bin/rbx ===
    right shift by 1 263983190.6  (±5.8%) i/s - 1312508064 in   4.992483s
    right shift by 8 248314080.0 (±10.5%) i/s - 1224656144 in   4.994831s
   right shift by 16 252206987.9  (±9.5%) i/s - 1245788352 in   4.993810s
   right shift by 32 266042755.2  (±5.8%) i/s - 1322271225 in   4.993654s
   right shift by 64 246394016.8  (±9.9%) i/s - 1217534883 in   4.995573s
Cast FIXNUM_WIDTH constant
Use a more esoteric encoding in IO.new tests

This is to fix some specs that were failing on a system where the
default external encoding was already set to ISO-8859-1.

As the :internal_encoding option is ignored when it is the same as the
external encoding, certain tests would fail due to the IO object's
internal encoding being nil.
Restore failing tags for spec that was passing as a false positive

When run on systems where UTF-8 is the default external encoding, a
particular spec was passing when it shouldn't have. Running it on a
system with a different default encoding revealed the issue.