When should one use a custom delegate instead of Func/Action/Predicate? - C#