code: function Swiz(defs, options) {
    if (! (this instanceof Swiz)) {
      return new Swiz(defs, options);
    }
  
    var defaultOptions = {
      'stripNulls': true,
      // if there are serializerType markers in objects, they will be removed from serialized versions.
      'stripSerializerType': true,
      'for': null
    }, i, o;
  
    this._defs = {};
    for (i = 0; i < defs.length; i++) {
      o = defs[i];
      this._defs[o.name] = o;
    }
  
    this._options = merge(defaultOptions, options);
  }
docs: The constructor for the swiz class
  @constructor
  
  Notes about the data def.
  
  It's first a set of object type definitions.
  
  Each object type definition is a list of slots, which is a pair
  of name and an object containing the metainformation.
  
  The metainformation is free-form.  In a DRY fashion, it'll assume
  that the name is the name of the object's variable.  If it isn't, you
  can use 'src' to retrieve something else.
  
  'type' is the type (I use thrift's format), 'desc' means the description.
  These are for making things self-describing down the road.
  
  @param {!Object} defs data def.
  @param {!Object} options options for serialization.