code: function(schema, options) {
    options = options || {};
  
    // Initialization
    this.schema = new Schema(schema);
  
    // Check if provided seed conforms to the given schema
    // Only when schema has an id and seed is provided
  
    if (this.schema.id && options.seed && options.seed.schema) {
      if (!_.isEqual(options.seed.schema, [this.schema.id, this.schema.version])) {
        throw new GraphError([
          "Graph does not conform to schema. Expected: ",
          this.schema.id+"@"+this.schema.version,
          " Actual: ",
          options.seed.schema[0]+"@"+options.seed.schema[1]
        ].join(''));
      }
    }
  
    this.nodes = {};
    this.indexes = {};
  
    this.__seed__ = options.seed;
  
    this.init();
  }
docs: A `Graph` can be used for representing arbitrary complex object graphs. Relations between objects are expressed through links that point to referred objects. Graphs can be traversed in various ways. See the testsuite for usage.  Need to be documented: @options (mode,seed,chronicle,store,load,graph)