A rethinking of IEnumerable