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.
Actually, I had tried that, but it fails for the cases, where the caller does: `generate!T()` where `T` is a struct type with static opCall. The code still compiles, but it creates a "dead" `T` member in the returned result (while not a huge issue in and out of itself, it can be problematic WRT disabled this, postblit, assignment...)