Cache column key generation for speedup
Cache column key generation for speedup

Treat columns as case and space insensitive means generating a key for
each one. Doing some rudimentary profile revealed that we were doing
this operation a (not literally) inordinate number of times:

For a 100,000 row file:
```
  ncalls    tottime  percall cumtime   percall filename:lineno(function)
 3600006    1.956    0.000   19.564    0.000 columns.py:30(make_key)
 3600006    5.610    0.000   17.608    0.000 {method 'join' of 'str' objects}
  300000    1.073    0.000   16.557    0.000 recipients.py:133(<dictcomp>)
34000054    9.209    0.000   11.998    0.000 columns.py:35(<genexpr>)
```

This commit caches calls to this function so when it is called with the
same argument (which it nearly always is) we don’t have to do the same
intensive string manipulation.

This cuts the time for processing a 100,000 row file from 32s to 10s.

alphagov/notifications-utils