Greater accuracy for validates_inclusion_of on non-numeric ranges

Before this patch, validating on the inclusion of a value in the following range would be true:

    validates :color, inclusion: { in: :a..:f }  #=> :a, :b, :c, :d, :e, :f 
    p = Product.new(color: :be)
    p.valid? => true

This uses the more accurate Range#include? if the range is made up of strings or symbols, while sticking to the faster Range#cover? for floats, fixnums, etc.

Fixes #10593