Print warning after determining return value

rb_warn() calls back into Ruby and can result in a GC. Therefore we
print the warning after determining the result, otherwise the `big`
variable might point to invalid memory due to it being moved.

Also improve the style to better match style guide for bignum methods.
Add RBX_GC_STRESS compile time flag to enable GC stress testing

This allows for defining stress testing of the young and / or mature GC.
This means that the given GC will run as often as possible on every
possible GC checkpoint. This makes it easier to flush out issues due
to for example the GC moving objects.
Fix GC issue with rb_ary_to_ary

The problem was that `obj` could have moved because of GC happening when
respond_to was called. So we should reread the value from the handle
here instead of using it directly.
Move Thread setup into the VM and fix GC issues with rb_thread_create

This moves thread setup into the VM, because if it happens in Ruby it
might trigger a GC. This is problematic with rb_thread_create, which
uses a void* pointer to pass arguments around that might get cleaned up
too soon then.

By using setup this way, we can ensure no GC happens before the new
thread is properly started and has extracted the possible argument. We
also need to make sure we reload the thread object in case of an
exception so we don't accidentally refer to an old / moved version of
the object.
Wrap up strerror_r usage inside macro

This wraps up the uglyness needed to hide the annoying fact that
strerror_r has different signatures for GNU and XSI. On GNU it also
marks the return value as not ignorable. By using a hacky if() around
it, we can ignore the value.

We wrap up the uglyness in a macro so we don't see it everywhere...

Fixes #2363
Wrap strerror_r to return the error message string

GNU `strerror_r` returns a pointer to a string containing the error
message, which may be the buffer passed as `buf`, or a pointer to an
immutable static string, in which case `buf` is unused.

XSI `strerror_r` always stores the error message in `buf`, and
returns an integer (0 for success).

This modifies the RBX_STRERROR macro to ensure that we match the
GNU-style use of the function.
Bump config_version
Use static_cast for strerror_r return type check
Add specs for requre relative for symlink path
Use realdirpath instead of dirname

When rubinius try to execute require_relative with symlinked path
File#dirname will not recognize symlink and returns wrong path. But
File#realdirpath will follow symlink and return proper path for
require_relative.
Merge pull request #2359 from LTe/require_relative_symlink

Require relative symlink
Add spec for respond_to_cache and cache invalidation
Add name for respond_to sites we see

This ensures we properly bump serial numbers when we see a method with
this name defined.

Fixes #2366
Remove unused ObjectMemory code
Change AtomicReference#initialize to accept false

Currently, Rubinius::AtomicReference#initialize will
silently discard the desired initial value for the
reference if it is 'false'. If one opts not to provide
an initial value for the reference, it defaults to nil.
In this case, the #initialize method will not set the
value of the AtomicReference to nil. However, rather
than checking if the initial value argument is nil,
it checks if it is falsey. This means that both nil
and false values are excluded. This patch modifies the
method to explicitly check if the value is nil.
Fix GC mask for JIT write barrier
Fix code generation for JIT stubs

This would check against the wrong variable for NULL. This could result
in an incorrect NULL deference in the JIT helper.
Add debugging mode that clears memory to Immix

This overwrites memory with all 1's in immix when a line is not used.
This makes it easier to debug because objects will be seen as invalid
later if they haven't been properly marked.
Sweep after unremembering objects

This makes sure it works with the Immix GC debugging flag because
otherwise the objects are already invalid in the unremember set.
Add test example for AtomicReference.new