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 ;)
> @alco in imperative lang you'd usually used 2 statements as well..

Whatever. All I care about is generating unnecessary garbage. The code creates one new tuple for each `put_elem` only to discard one of the immediately.

Look at how you can use transients in Clojure to build-up a collection in place and then turn it into an immutable value as the last step. https://github.com/cognitect/transit-clj/blob/25b36a8505a8f194aafebf9c2c6fa9e24b2b13b1/src/cognitect/transit.clj#L226-L230