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 would move the advises to concrete unittest examples.
```d
/**
 * It can be composed with $(XREF algorithm, cache) to ...
 */
unittest
{
    generate!(() => uniform(0, 10)).cache...
}
```