Fixed finding transcoding path.
Add caching and pre-computed Encoding::Converter paths.

It takes a fraction of a second to load a pre-computed association of all
possible conversions from the builtin converters. If other converters are
loaded, the cache will still be used, but cache misses are costly because
an exhaustive search will be performed for any missing and unavailable
conversions. However, the likelihood of those are rare, since they will
raise exceptions.

This caching reduces spec run times by about 50% for encoding specs and
about 10% overall.
Barrage of attacks against the dark lair of String#encode.
Revert "ruby 1.9: File.expand_path returns a string in the default external enconding"

This reverts commit 27e43a671d7ff84f56fcbb9261f38d0e7ab60076.

This is not the correct way to fix the spec failure. Rather than fixing
incorrectly and obscuring the issue by removing the spec tag, we need to
leave the specs failing.

Conflicts:

	kernel/bootstrap/type18.rb
	kernel/bootstrap/type19.rb
Fixed loading encodings in 1.8 mode.
Removed CI tags for passing 2.0 specs.
A few silly fixes for Encoding::Converter.
More Encoding::Converter#primitive_convert specs.
Fixes for Encoding::Converter#primitive_convert.
Fixed bug in String::append primitive.
Deal with econv_destination_buffer_full.
Updated CI tags for passing specs.
Cleaned up some IO#read specs.
Added mspec help options_or_mode, moved fmode helper.
Use options_or_mode in new_fd and new_io helpers.
A few encoding-related IO#read specs.
IO.pipe accepts an encoding options Hash.
A spec for BasicObject#instance_eval with strings.
Some IO#ungetbyte specs.
Encode IO#read results. Fixes #1818.