Fix exception message for non-deferred return types in GuardClauseAssertion,

such that when it encounters `IEnumerable` return types, it will treat the known non-deferred enumerable types (such as `Array`, `IList`, `ICollection`, `IDictionary`, etc) as non-deferred, and therefore will not give a misleading exception message about them being deferred.

Note that this supports well-known generic and non-generic BCL collection types (and their interface counterparts) explicitly (aka. a white list).

This fixes #277.