code: function(p, config) {
              if (p) {
                  if (L.isFunction(p)) {
                      this._plug(p, config);
                  } else if (L.isArray(p)) {
                      for (var i = 0, ln = p.length; i < ln; i++) {
                          this.plug(p[i]);
                      }
                  } else {
                      this._plug(p.fn, p.cfg);
                  }
              }
              return this;
          }
docs: Adds a plugin to the host object. This will instantiate the
  plugin and attach it to the configured namespace on the host object.
  
  @method plug
  @chainable
  @param p {Function | Object |Array} Accepts the plugin class, or an
  object with a "fn" property specifying the plugin class and
  a "cfg" property specifying the configuration for the Plugin.
  <p>
  Additionally an Array can also be passed in, with the above function or
  object values, allowing the user to add multiple plugins in a single call.
  </p>
  @param config (Optional) If the first argument is the plugin class, the second argument
  can be the configuration for the plugin.
  @return {Base} A reference to the host object