function fisherYates( x, size, rand ) {
	var tmp;
	var N;
	var i;
	var j;

	N = x.length;

	// Note: we skip the first element, as no further swaps are possible given that all other indices are excluded from swapping...
	for ( i = N-1; i > 0; i-- ) {
		// Generate an integer index on the interval: [0,i]
		j = floor( rand()*(i+1) );

		// Swap elements:
		tmp = x[ i ];
		x[ i ] = x[ j ];
		x[ j ] = tmp;
	}
	return slice.call( x, 0, size );
}
Samples uniformly without replacement using the Fisher-Yates shuffle.

## References

-   Knuth, Donald E. 1997. _The Art of Computer Programming, Volume 2 (3rd Ed.): Seminumerical Algorithms_. Boston, MA, USA: Addison-Wesley Longman Publishing Co., Inc.

@private
@param {ArrayLike} x - array-like object from which to sample
@param {NonNegativeInteger} size - sample size
@param {Function} rand - PRNG for generating uniformly distributed numbers
@returns {Array} sample