Still trying to get my head around the various promises and nodes.

Is the point of addLazy() to create a node that returns a closure? So I can do something like this?

```js
  graph.addLazy('lazylog', function (x) { console.log(x); return true }, ['x'])
  graph.add('bool-coinFlip', function () { return Math.random() > 0.5 }, [])
  graph.add('ifElse', function (cond, ifClause, elseClause) { 
    if (cond) return ifClause()
    else return elseClause()
  }, ['cond', 'ifClause', 'elseClause'])

  return graph.newBuilder()
      .builds({'heads': 'lazylog'}).using({x: graph.literal('heads!')})
      .builds({'tails': 'lazylog'}).using({x: graph.literal('tails!')})
      .builds('ifElse').using({'cond': 'bool-coinFlip'}, {'ifClause': 'heads'}, {'elseClause': 'tails'})
```

In other words, I'm trying to get my head around how the implementation differs from something like:

```js
Graph.prototype.addLazy = function (name, fn, args) {
    this.add(name, function () {
        var theArgs = arguments
        return function() { return fn.apply(null, theArgs) }
    }, args)
}
````