Enumerable object's runtime type used by ShouldBeEquivalentTo rather than declared type

This continues with the work done in PR #117.  It makes assertions on enumerables objects that are assignable to IEnumerable or IEnumerable<T> respect the assignment rules of the declared type generally, and the runtime type when configured to use runtime types.

As ShouldAllBeEquivalentTo did not pass along the collection type this solution was unworkable until ShouldAllBeEquivalentTo was re-written in terms of ShouldBeEquivalentTo so that the proper type information was passed along.  The alternative way to handle ShouldAllBeEquivalentTo's behavior would have required adding a new member to the EquivalencyValidationContext for the type used by ShouldAllBeEquivalentTo and making the Steps respect it where appropriate..