implemented reducers using generator pattern

Moved all the reducers over to using the generator pattern in
map_reduce_utils instead of implementing iteration on their own. The
reducers also use the KeyValueToDict to parse key-value pairs now, as
opposed to simply indexing them with integers.

Added a precision argument to mapred_tfidf.py so that you can vary the
number of decimal places in the results.