add tests for memoize with kwargs
memoize handles kwargs
only use kwargs in memoize if function has kwargs

Benchmark with bench/test_memoize.py
Before around 0.06s
After around 0.04s

Benchmark with bench/test_memoize_kwargs.py
Negligible increase if any (variance is oddly high)
memoize key on kwargs.items(), not kwargs