Add a way to track context across async call boundries

```
var assert = require('assert');
var fs = require('fs');

process._asyncContextId[0] = 1;
fs.stat('.', function(){
 assert(process._asyncContextId[0] === 1);
});

fs.stat('.', function(){
 assert(process._asyncContextId[0] === 1);
 process._asyncContextId[0] = 2;
 fs.stat('.', function(){
   assert(process._asyncContextId[0] === 2);
 });
});

assert(process._asyncContextId[0] === 1);

process._asyncContextId[0] = 3;

assert(process._asyncContextId[0] === 3);
```