Simplex Seed Platform Agnosticism

Discovered that std::shuffle's implementation is left up to the implementer.

I.e. its interface -- shuffling a sequence -- is well-defined, but its mapping of a sequence in a certain state, and a certain type of generator in a particular state, to a particular output sequence and generator state, is not guaranteed to be the same across library implementations.

Accordingly, the code which randomizes the permutation table for simplex noise generators has been rewritten to use a custom shuffle (which will produce the same output sequence and generator state given identical input sequence and generator state across libraries/platforms).

This insures that the same seed results in the same world, even across library versions and distinct platforms.