Enum.sample using reservoir sampling

Here's the PR for `Enum.sample` with single pass of the input collection, using [reservoir sampling](http://en.wikipedia.org/wiki/Reservoir_sampling), based on the experiments [we've talked about](https://github.com/elixir-lang/elixir/pull/2565).

Mentioning @joshnuss as he first came up with the topic, so the chance he needs the functionality :)


~~The algo has a funny corner case, that when the requested sample size is bigger than a collection size, the original collection is returned untouched - ie. not randomised. Is this desired behaviour for the API enduser?~~

~~If not, we can fallback to shuffling the sample buffer in such case, with a disadvantage that it will take another piece of time - but with the advantage that the input collection would not be walked again, because shuffling would be on the sample we already got. We obviously can't detect such situation early, because we know the size of the whole collection only after walking it.~~

A side note, how on earth is the random generator for doc_test seeded? :) I succeeded with in-doc examples only by trial and error ;)
Yes, but 1) this resembles more original pseudocode algo, 2) I will check if pattern matching doesn't make it faster, then lifting this line up doesn't make sense.

Also there's a case for the first element of input collection. It doesn't need calling random_index(), it could just copy first element of collection into the sample at 0 position. I left it as it is because random_index(0) always returns 0 and also we eliminate additional check for 0-index for every element, at the cost of one surplus put_elem() for the first element only. There's a chance that pattern matching instead of `if` will make timings different, so I leave it for later experiments.