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.
I ran the test 10_000_000 times, and it never failed. I'd give you the exact number, but the formula is not standard bernouilli, so I don't know the exact number.

Most of the people who have requested this style of range, is to use with generator-like functions, which are most often random number distributions. I wanted to write a unittest that used randomness, and this was the result. As @MartinNowak observed, it's convoluted, so we should probably simplify it, or do away with it entirelly.