Another concern here is that converting the block to a proc and back has a cost. Seems a shame to pay that cost in 2.0.0 to support 1.8.7. What about something like `with_flat_map_support(array).flat_map {|e| ...}`?

```ruby
if if [].respond_to?(:flat_map)
  def with_flat_map_support(array); array; end
else
  def with_flat_map_support(array)
    array.dup.class_eval do
      def flat_map(&block); map(&block).flatten; end
    end
  end
end
```