Use mathn from 1.9 and 2.0 for their respective modes

This allows this to run, doesn't pass all specs yet. On MRI, loading
mathn triggers a flag that changes behavior in Rational and Complex,
this is something we still need to implement then.
Fix handling of Rational() and Complex() when Mathn is loaded

In these cases when the denominator is 1 for Rational and the imaginery
component for Complex is 0, we return the integer value when Mathn is
loaded.

This behavior ensures that numerical division of whole numbers where
there would be no remainder work properly. This would otherwise for
example cause exceptions in the Redis driver where the return value of a
length computation is embedded in the command string sent to the server.
So if an application would load mathn, Redis would break.
Remove tags for passing Mathn specs
Fix invalid memory read in Syck extension

This could cause a segfault because an invalid pointer would be read.
Don't use stringstream because it leaks with rb_raise

rb_raise uses setjmp which doesn't run destructors properly. This results
the stringstream leaking. rb_raise already supports printf style arguments
so we can use that here.
Add CPPFLAGS handling properly

Before the implementation wasn't complete, which is why it got removed
in the first place. This adds it back properly.
Use String#bytesize in String#{eql?,===,==}
Add specs for String#{eql?,===,==}
Make String#{eql?,===,==} encoding-aware
Use Encoding.default_external in File.expand_path
Remove passing spec tags
Add a spec for Kernel#` and encoding
Use Encoding.default_external in Kernel#`
Yield chars not bytes from StriongIO#each_char
Remove $KCODE from StringIO#each_char in 1.9 mode
Add a spec for TCPServer#accept
Make socket binmode in BasicSocket#accept
Ensure to set encoding before returning