Variable Accuracy

Re-wrote the database building and generation (again) to now allow for a
weighted variable chaining (up to 5 words up from the previous 3).
genWeights is a list from which the chaining number is chosen, in this
case giving more weight to the higher chains, but still offering the
chance for a lesser chain (In this case, more weight is given to the 4 &
5 word chains, but 2 & 3 are included options; the list is in a random
order to help avoid preference issues in the random selection process).
The result of this is a more accurate language overall with the
introduction of some needed randomness as well. Fallbacks still exist
for each chain, should the selected tier fail to find a viable match.

Overall process time is increased with the additional tiers of chaining,
but the time is still very reasonable for the results (typically still
under 10 minutes in testing). What is severely increased is the memory
usage during generation. Holding 5 tiers of data in memory is extremely
costly, putting this program well past the capabilities of 32-bit Python
and, indeed, the average PC. There are likely ways this could be
reduced, but any such action could drastically increase the runtime.
Will maintain this as-is for now, as I personally have the resources to
support this and the speed of the operations is immensely helpful in
development and debugging for me. If a version was ever made for more
wide use, a slower, less resource intensive system might be necessary.