code: function json(url, obj, headers, fn){
    if (3 == arguments.length) fn = headers, headers = {};
  
    var req = new XMLHttpRequest;
    req.onerror = fn;
    req.onreadystatechange = done;
    req.open('POST', url, true);
    for (var k in headers) req.setRequestHeader(k, headers[k]);
    req.send(JSON.stringify(obj));
  
    function done(){
      if (4 == req.readyState) return fn(null, req);
    }
  }
docs: Send the given `obj` to `url` with `fn(err, req)`.
  
  @param {String} url
  @param {Object} obj
  @param {Object} headers
  @param {Function} fn
  @api private