Additional tweaks and fixes for StringIO

* Fix bug related to porting (http://bugs.ruby-lang.org/issues/8728)
* Actually throw arg length error, even though invoker logic
  will do it (consistency with MRI port)
* Cleanups