static void Main(string[] args)
        {
            var pipeline = new GenericBCPipeline <string, bool>((inputFirst, builder) => inputFirst.Step(builder, input => FindMostCommon(input))
                                                                .Step(builder, input => input.Length)
                                                                .Step(builder, input => input % 2 == 1));

            pipeline.Finished += res => Console.WriteLine(res);
            pipeline.Execute("The pipeline pattern is the best pattern");
        }
        public static TOutput Step <TInput, TOutput, TInputOuter, TOutputOuter>
            (this TInput inputType,
            GenericBCPipeline <TInputOuter, TOutputOuter> pipelineBuilder,
            Func <TInput, TOutput> step)
        {
            var pipelineStep = pipelineBuilder.GenerateStep <TInput, TOutput>();

            pipelineStep.StepAction = step;
            return(default(TOutput));
        }