Remove method for manual block jitting
Add JIT primitives for often used methods

Creating a binding happens often in for example templating libraries
where the binding is used for evaluating the template.
Use packed ivar setting in inline accessor writers

This can use the fast path if the instance variable is a packed ivar and
is writter with an attr_writer. This also uses the typed check for slots
like set_ivar does so it properly fails when a wrong type is set.
Setup intermediate attr_writer and attr_reader

This ensures that classes loaded in kernel/common such as Binding also
properly track the ivars for attr_* methods. Before Binding didn't get
the proper optimized memory layout, significantly affecting performance
of create a binding.
Introduce fast path for nested constants

We didn't have caching for constant lookup for nested constants, such as
Rubinius::VariableScope. This means that when a constants was referenced
in that way, it would not cache the VariableScope constant.

This commit introduces a constant cache very similar to not nested
constants. It also stores the scope it was used under, so we can
properly validate the have the correct constant. Also specialization is
added to the JIT to have a fast path for these cached constants if they
are still valid.
Add slot for metadata in block environment
Improve type checking for array and binding

Checking respond_to? is relatively expensive, so when we don't have to
coerce a type anyway, we shouldn't have to check for it.
Only call internalize when there's no machine code
Also store the LLVM version with a system LLVM