Introduce std.range.generate

`generate` (name up to debate) simply takes a callable, and turns it into a range. Particularly useful for things like random number generators, functions with state, or functions that modify a global state.

As requested in the forums. Pinging @MartinNowak.
Is this really guaranteed to be true 100% of the time? It seems to me there is an *extremely* small chance of it not being true, which seems iffy for an assert, even if the probability is astronomically small... or am I missing something?