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