Favour Rubinius::Type.object_respond_to? over obj.respond_to?

This is to avoid issues with coercing an object to an array when the
object's respond_to? method has been incorrectly overridden to only take
the first argument.
Add benchmark for Module#===
Only do compatible encoding check if encodings differ
Improve class id kind_of check logic

This improves the logic by detecting if we check against the class
itself. This happens for example in Module#=== where we pass self to the
kind_of check.

By setting up the known type as a known class, we can use that in the
kind_of logic to grab the class id. This helps especially for class
mismatch logic.

Before:

=== bin/rbx ===
Fixnum#=== with a Fixnum
                     102297328.1 (±3.5%) i/s -  506730185 in   4.960395s
Fixnum#=== with a String
                     99781379.6 (±3.4%) i/s -  495151020 in   4.969230s
String#=== with a Fixnum
                     22579988.7 (±2.8%) i/s -  112617265 in   4.992061s
String#=== with a String
                     86210651.5 (±3.5%) i/s -  428675936 in   4.979576s

After:

=== bin/rbx ===
Fixnum#=== with a Fixnum
                     102321826.6 (±4.6%) i/s -  505887780 in   4.959236s
Fixnum#=== with a String
                     99734635.6 (±2.9%) i/s -  495457761 in   4.972238s
String#=== with a Fixnum
                     93472947.3 (±4.6%) i/s -  463415994 in   4.975102s
String#=== with a String
                     93649428.2 (±3.5%) i/s -  465282112 in   4.976410s
Add specs for String#reverse and multibyte encodings
Cleanup Time#strftime primitive
Use actual 8k buffer instead of 8096 bytes
Introduce multibyte safe String#reverse! primitive

String reversal needs to be encoding aware, so make sure we handle
multibyte characters properly if they are present.

Fixes #2570
This check would cause conditional jumps on uninitialized data

If the object wasn't initialized yet, it would read uninitialized data
when doing the comparison. Therefore we disable this for now.
Add specs for raising a NameError when given an invalid ivar name
Ensure that ivars can't be given invalid names like "@0"
Merge pull request #2571 from leocassarani/issue-2568

Raise an exception for invalid instance variable names
Fix memory leak in compiler

When compilation would fail due to a syntax error for example, all
memory wasn't properly freed for the parser state.
Add a String#clone spec for frozen instance
Fix String#clone for frozen instance

Ported inserting point from Kernel#clone in kernel/alpha.rb.
Merge pull request #2572 from kachick/string-clone-copy_frozen

String#clone should copy frozen state as Kernel#clone
Renamed rb_stdout temp var in test to avoid C-API conflict.
Fixed ruby.h include in VM tests to be mode agnostic.
Merge remote-tracking branch 'origin/master' into compiler

Conflicts:
	lib/ext/melbourne/var_table19.cpp
	lib/ext/melbourne/var_table19.hpp