Improve perf characteristics of filling gaps

Previously for every period and expected permutation of group_by key
value it would loop over all data points trying to find a match. This
led to num_periods * num_permutations * num_data_points iterations,
which will get very slow very fast. We will always need to go through
every period and permutation but removing the last multiple has big
change.

I switched this for pre-hashing the data points so that we can find a
match in O(1) rather than O(num_data_points). The reduced the time to
fill in gaps from 180s to 0.175s for the troublesome lpa journey query.

I have ensured that the output of this function is the same. The pickled
arguments and results are pulled out by wrapping
fill_group_by_permutations in a decorator that grabs *args and **kwargs
and the results and stores them in a file.

You can see the result of the profile by running:
	`nosetests --nocapture tests/perf/`