function factory( options ) {
	var opts;
	var err;
	opts = defaults();
	err = validate( opts, options );
	if ( err ) {
		throw err;
	}
	return mergefcn( opts );
}
Returns a function for merging and extending objects.

@param {Options} options - merge options
@param {number} [options.level=Infinity] - merge level
@param {boolean} [options.copy=true] - boolean indicating whether to deep copy merged values
@param {(boolean|Function)} [options.override=true] - defines the merge strategy
@param {boolean} [options.extend=true] - boolean indicating whether new properties can be added to the target object
@throws {TypeError} must provide valid options
@returns {Function} function which can be used to merge objects

@example
var opts = {
    'level': 100,
    'copy': true,
    'override': true,
    'extend': true
};

var merge = factory( opts );
// returns <Function>