Combining initializer requirements in protocols with generic types