@ToadJamb -- I'd like to scale this back a bit.  This issue is taking up far too much of my time for what is ultimately a small issue compared to the rest of the RSpec 3 stuff we're working on.

Back in your original issue (#1094), you mentioned one possible solution:

> Do not use srand for randomization.

I'd like to go with this solution.  Besides the fact that it's a much smaller change, there are a number of reasons I prefer it now that we've worked through some issues in this PR:

* It decouples the setting of the seed RSpec uses for randomizing the order of groups/examples from seeding ruby's global random number generator.
* This allows us to keep `config#seed =` (which I think is essential to support preloading/forking runners, and to support extension gems that want to set that seed).
* It preserves the principle of least surprise with respect to users calling `srand`.  RSpec won't have any affect on randomization of user code at all, and users can call `srand` in `spec_helper.rb` and have it do what they expect.
* For users who want to use RSpec's seed for their own randomization (like you), it's trivial to add one line to `spec_helper.rb` to achieve that: `Kernel.srand(config.seed)`. (We could even include this in the commented out section of the generated spec_helper.rb).
* It requires _no_ deprecations in 2.99: all related RSpec APIs will continue to work the same; we just aren't leaking into global things we shouldn't touch anymore.

With respect to implementation, here's what I'd like to see:

* `--seed <num>` will continue to set the order to random, since that's the only thing the seed is used for.
* RSpec should pick its initial seed without using `srand` as it does now.  Not sure what the best alternative is, but perhaps `SecureRandom` (from stdlib) or using the microseconds from `Time.now` could work for that?
* The seed will only print off at the end of the run if the random orderer is used (as it does now), since that is the only thing it is used for.  (In the *very* rare cases where the user chooses _not_ to use random ordering but uses RSpec's seed to seed their randomization, they are using the seed manually and can add an `after(:suite)` hook to print it off manually as well).
* For RSpec's random orderer:
  * We'll use the random number generator you've kindly ported from backports for rubies that lack `::Random` (e.g. 1.8.7.).
  * We'll use `Array#shuffle(random: rng)` on rubies that support it, and the shuffling algorithm you've implemented for rubies that don't.
* None of the "prevent RSpec from calling `srand` in its own specs" hacks will be needed since RSpec won't be calling srand anywhere.

At this point, the signal-to-noise ratio in the commit history of this PR is quite low (given it's at 43 commits and counting and we're taking a different direction).  Given that, would you be willing to either open up a whole new PR or squash this down into something more reasonable?