Minor test improvement: don’t generate the name twice.
Allow name data to be cached to speed up generation

- Speeds up name generation by about 500x.
- Builds a list then uses bisect to find the selected
random value. 
- Assumes name data is sorted.

>>> import timeit
>>> timeit.timeit('import names; names.get_full_name()', number=1000)
8.02225399017334

>>> timeit.timeit('import names; names.get_full_name(cached=True)', number=1000)
0.1406540870666504