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