Generate, Test, and Aggregate - A Calculation-based Framework for Systematic Parallel Programming with MapReduce