Creates a Leipzig.js glossing object
@constructor
@param {String|NodeList|Element} selector - determines elements to be glossed
@param {Object} config - configuration object
function Leipzig(selector) {
    var config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];

    if (!(this instanceof Leipzig)) {
      return new Leipzig(selector, config);
    }

    if (typeof selector !== 'undefined') {
      if (typeof selector === 'string' || selector instanceof NodeList || selector instanceof Element) {
        config.selector = selector;
      } else if (typeof selector === 'object') {
        // if the first argument is an object, let's assume it's actually a
        // configuration object, and not the selector
        config = selector;
      } else {
        throw new Error('Invalid selector');
      }
    }

    this.config(config);
  }