smarter execution flow

@williamboxhall The current execution flow is too limited, it is capable to batch requests only for simple scenarios. This change introduces a smarter execution flow that allows to batch requests even in deep nested ```flatMap``` compositions.
I just reverted back to before you changes and the behaviour is the same. Could be good to get a unit-test to prove the new behaviour?