Use transcoding primitive directly for String#encode

This shouldn't always enabled partial transcoding etc, but use the
current settings directly.

Fixes #2388
Remove now duplicated encoding check logic from kernel/
Merge pull request #2386 from ryoqun/string-encoding-equality

Make String#{eql?,===,==} encoding-aware
Also update 2.0 mode library files with changes

Also adds a tag for a failing spec for changed 2.0 behavior.
Add missing ENABLE_LLVM guard
Speed up literal Hash creation

The allocate path is faster since it doesn't need things like splatting
arguments etc. like how .new does.
Improve detection for non X86 architectures
Improve JIT type checks for casting and creating arrays
Improve jit checks for casting arrays
Use correct 64 bit type in jit write barrier

This was causing an issue on 32 bit systems where it would use the wrong
type.
Don't hardcode gcc; use BUILD_CONFIG[:cc]
Add spec for rest argument for Method#parameters
Fix handling of unnamed splat

This also uses the :* name, so if anyone ever uses unnamed_splat as
name, we don't collide with that. :* should not be possible to use since
that would be the unnamed splat itself.
Add specs for proc parameters with block arguments

Also adds specs for method parameters and blocks for the same case.
Fix proc parameters handling with a block argument

Fixes #2396
Add tag for failing spec
Add empty warnflags
Only load additional files for LLVM >= 3.2
Extract duplicated code for refactoring
Use bytesize for strings inside socket handling