code: def dispatch(splits, *funcs, **kwargs):
      
      map_func = kwargs.get('map_func', _map_func)
      apply_func = kwargs.get('apply_func', _apply_func)
      return map_func(partial(apply_func, funcs), splits)
docs: takes multiple iterables (returned by dispatch or broadcast) and delivers
      the items to multiple functions
  
             /-----> _INPUT1 --> double(_INPUT1) --> \
            /                                         \
      splits ------> _INPUT2 --> triple(_INPUT2) ---> _OUTPUT
            \                                         /
             \--> _INPUT3 --> quadruple(_INPUT3) --> /
  
      One way to construct such a flow in code would be::
  
          splits = repeat(('bar', 'baz', 'qux'), 3)
          double = lambda word: word * 2
          triple = lambda word: word * 3
          quadruple = lambda word: word * 4
          _OUTPUT = dispatch(splits, double, triple, quadruple)
          _OUTPUT == repeat(('barbar', 'bazbazbaz', 'quxquxquxqux'), 3)