Checks if an exception happened when yielding

Checks if #to_ary raises an exception
    
If `#to_ary` was redefined and being yielded, an crashed occurred.
    
Fixes it by finding every `send(state, call_frame, G(sym_to_ary))` call
in a object and checking if it is null. If it is, an exception occurred,
so we run it.
    
Example (see #2347):
    
```ruby
require 'test/unit'
    
class TestFoo < Test::Unit::TestCase
  def test_foo
    obj1 = Object.new
    obj2 = obj1.dup
    def obj1.to_ary
      raise
    end
    assert_equal([obj2], [obj1].flatten)
  end
end
```
    
Fix #2347