Improve randomness by avoiding duplicate sentence elements

By shuffling the element array and slicing out the needed elements
instead of randomly picking one element on every iteration we avoid
duplicate words in sentences where the same reference is used several
times (e.g. for the name generator for Baba this ensures you don't get
names like 'Emmett Emmett Awesomeburg').

This requires an array shuffle algorithm and an extra loop when parsing
sentence elements, and increases the generated grammar size by about
100b.
Improve compressability for exported functions
Update generator
Assign variables if not set by user
Add support for recursive sentence variable references
Remove unsupported recursive references
Finalize typeahead/natural entry mode