Don't transcode IO strings if the external encoding is ASCII-8BIT

See http://bugs.ruby-lang.org/issues/8342#note-4
Add spec for IO#set_encoding(nil, nil) when mode != RDONLY
Set IO external/internal encodings to the default ones when appropriate

In particular, this relates to calling IO#set_encoding with nil
arguments, which under some circumstances will need to set the IO
instance's encodings to Encoding.default_external/internal.
Add specs for the encoding of IO#gets and IO.readlines return values

In particular, these specs are concerned with the transcoding of IO
strings into the object's internal encoding,  as well as the special
case of the external encoding being ASCII-8BIT.
Use IO.read_encode in IO::EachReader to transcode strings as appropriate