code: function mergeExt (opts, target) {
    var visited = []
  
    opts = opts || {}
    opts._visited = visited
    opts._count = 0
  
    for (var i = 2; i < arguments.length; i++) {
      target = _merge(opts, target, arguments[i])
    }
  
    return target
  }
docs: extended merge
  
  #### Example
  
  ````js
  var merge = require('mergee').merge,
  target  = { t: 1, x: { y: 'z' } },
  source1 = { t: { s1: /source1/ } },
  source2 = { t: { s2: new Date(100), x: null } };
  mergeExt({ ignoreNull: true }, target, source1, source2);
  // target === { t: { s1: /source1/, s2: Wed Dec 31 1969 17:00:00 GMT-0700 (MST) }, x: { y: 'z' } }
  ````
  
  @param {Object} opts - options
  @param {Boolean} opts.ignoreNull - treat `source === null` as undefined - target does not get deleted
  @param {Boolean} opts.ignoreCircular - ignore cirular structures - no error gets thrown
  @param {Object|Function|Array} target - target object
  @param {Any} source - arguments 3 ... n
  @return {Object} merged target