Better error handling for getting current working directory

Also unifies the style for the other Errno handling.
Fix WeakRef constructor and double initialization of WeakRef class

The class was setup twice, actually creating two WeakRef classes. This
is because the ontology already sets up the WeakRef class. Therefore the
additional logic can be removed.
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
Add dummy encoding related capi specs
Find index by the encoding name, not onig encoding name
Add encoding spec for rb_str_new
Add an encoding related spec for rb_str_append
Use String#<< for encoding, infection, etc