function sumSeries( generator, options ) {
	var tolerance;
	var nextTerm;
	var counter;
	var result;
	var opts;

	opts = {};

	if ( arguments.length > 1 ) {
		opts = options;
	}
	tolerance = opts.tolerance || EPS;
	counter = opts.maxTerms || MAX_TERMS;
	result = opts.initialValue || 0;

	// Repeatedly call function...
	do {
		nextTerm = generator();
		result += nextTerm;
	}
	while ( ( abs(tolerance * result) < abs(nextTerm) ) && --counter ); // eslint-disable-line no-plusplus

	return result;
}
Sum the elements of the series given by the supplied function.

@param {Function} generator - series function
@param {Object} [options] - function options
@param {PositiveInteger} [options.maxTerms=1000000] - maximum number of terms to be added
@param {PositiveNumber} [options.tolerance=2.22e-16] - further terms are only added as long as the next term is greater than current term times the tolerance
@param {number} [options.initialValue=0] - initial value of the resulting sum
@returns {number} sum of all series terms

@example
var gen = geometricSeriesClosure( 0.9 )
var out = sumSeries( gen );
// returns 10.0

function geometricSeriesClosure( x ) {
    var exponent = -1;
    return function() {
        exponent += 1;
        return Math.pow( x, exponent );
    };
}