Make emitting the same bytecode twice inside a SendFastNew idempotent

When the bytecode for a SendFastNew node is generated, two conditional
paths end up emitting bytecode for the same node twice. Under very
specific circumstances, for example in the presence of PatternArguments,
this operation was not idempotent, and local variable slots would not be
reset, leading to the generation of invalid bytecode.

This commit changes the logic behind the generation of new locals by
exiting early if a variable by the same name exists in the same scope,
thus allowing multiple copies of the same bytecode to reuse the existing
local variable slots.

Fixes #2323
Add compiler spec for the idempotence of the SendFastNew transform
Use BlockEnvironment#call_under for running class / module bodies

This makes fixing default visibility issues for methods defined on
blocks easier, because it creates a single path for module_eval and
regular class bodies, all going through call_under.
Extract fixup logic into separate method

This wasn't working properly for the new class initialization strategy,
so extract the method attaching something to a specific instance from
fixing up the chain.
Use push_type over push_rubinius && find_const :Type

We have a specific instruction for pushing Type, so we might as well use
it here.
Fix Executable layout

The new custom call site layout wasn't properly updated in the LLVM
object layout. This only actually ended up being a problem on 32 bit
systems where the actual layout changed due to alignment.

Fixes #2326
Remove invalid field from Class layout
Add specs for visibility of top level methods and script binding
Setup top level visibility and script attributes

This creates a tag for a call frame indicating it's a top level script
or the top level for visibility checks. For this we also support a
boolean value on call_under definining whether to open a new visibility
top level or not.

This can be used to fix visibility checks and have methods defined
inside blocks have the proper visibility in Rubinius.

Fixes #2316 and #2089
Remove tags for passing specs

These tags were for specs for methods defined in blocks and using the
proper visibility. These were the underlying specs for the fixed bugs.
Cleanup unneccessary code with new visibility setup

Remove other code that was put in place to support only certain
visibility cases, because the new setup handles them already.
Audit LLVM object layouts and improve style

Don't use numeric dummy output functions, but base them on the type
name. Also audits all LLVM object layouts we define, for example
VariableScope was not correct.
Add spec for rb_str_encode with the same encoding
Return duplicate when encoding is the same
Add specs for read_nonblock with 0 bytes

This adds specs for reading data without any data written and with
something written. This is extract from issue #2327 in Rubinius.
Short circuit when reading 0 bytes

When we read 0 bytes, we only care about the socket being readable,
which is already the case when we enter the primitive. In this case we
don't have to do anything and can return an empty string immediately.

This also mimics the behavior MRI has for this case, since it also short
circuits here.

Related to #2327
Add spec for sprintf and encodings

Adds a spec for when the arguments have an encoding that is compatible
with the format, but where the argument's encoding has multibyte
character support and the format doesn't.

Extract from #2325
Use string_build encoding protocol for sprintf

Instead of forcing the encoding on the result, we always start to build
the string with an empty string with the format's encoding. This makes
sure the encoding follows the proper support and will come out correct.

Fixes #2325
On FreeBSD this sometimes crashes, so don't initialize

This way it might still crash on FreeBSD if execinfo has issues there,
but at least it won't crash in normal use cases. A crash inside a crash
is annoying but not as problematic as not working at all.

Fixes #2330
Disable execinfo on FreeBSD as well since it's problematic