Create the IoResultIterator extension trait

IoResultIterator adds a new method to any Iterator over IoResults,
'fail_on_error' which wraps the Iterator so that any IoError except
EndOfFile causes the current task to fail!(). EndOfFile stops iteration.
Non-error results are unwrapped and returned. This is helpful for simple
programs that read from sources that are unlikely to fail, such as STDIN.
Update Lines and Chars iterators in std::io to return IoResult values

Any IO operation can fail and failure is modeled by returning an IoResult.
Most, if not all, IO related functions do this. However, these iterators
ignore any errors that occur. This change makes these iterators consistent
with the rest of the IO related code.