host/random: provide Lua binding for shuffle()

This function is useful to randomise the initial state, e.g., the
positions in the case of a mixture:

    local rng = random.generator({memory = "host"})
 1  local r = particle:get_positions()
 2  r = rng:shuffle(r)
 3  particle:set_positions(r)

Include this procedure in mixture-related scripts in examples/ and
test/. This fixes #310005.

The approach is not very efficient as it requires 6 deep copies:

 1  cuda::vector → std::vector → Lua table
 2  Lua table → std::vector → Lua table
 3  Lua table → std::vector → cuda::vector

Due to a bug in luaponte, we can not pass the sequence by non-const
reference forbidding in-place shuffle of the
std::vector<luaponte::object>, which adds one more copy.

There is also a shuffle function in GPU memory, but currently we have no
means to get access to the GPU array.
doc/recipes: describe how to setup a fluid mixture