Modules: adding load linked modules feature

This PR is mainly to get some guidance if I'm on the right track (i.e. what @tjfontaine had in mind).
It enables to include C++ modules simply by adding them to the `node.gyp` file and loading them from JS via `process.linkedBinding`.

It is based on `v0.12`, but I can rebase on `master` if that is better.
Please lmk what else needs to be done to get this completed, i.e do we need tests (a little hard to do since it needs to rebuild node to run) and/or an example of how this is used?

- introduced NM_F_LINKED flag to identify linked modules
- setting node_is_initialized after calling V8::Initialize in order to
  make the right decision during initial module registration
- introduced modlist_linked in order to track modules that were
  pre-registered in order to complete it once node is initialized
- completing registration of linked module similarly to the way it's
  done inside DLOpen

### Example

Assuming `src/simple.cc` registers itself via: 

```cc
void init_simple(v8::Handle<v8::Object> exports) {
  NODE_SET_METHOD(exports, "simple", Simple);
}

NODE_MODULE(simple, init_simple)
```

##### `node.gyp` addition

This addition can be done manually or via [nad](https://github.com/thlorenz/nad) which injects parameters derived from the existing `binding.gyp` into `node.gyp` via a simple command.

```json
{
"conditions": [
        [
          "simple_addon==\"true\"",
          {
            "sources": [
              "addons/simple/src/simple.cc",
            ],
         }
    ]
  ]
}
```

#### Loading inside `simple.js`

```js
var binding = process.linkedBinding('simple');
```
Instead, drop the indentation and just do the following:
```cpp
if (mod == NULL) {
  char errmsg[1024];
  snprintf(errmsg,
           sizeof(errmsg),
           "No such module was linked: %s",
           *module_v);
  return env->ThrowError(errmsg);
}

exports = Object::New(env->isolate());

if (mod->nm_context_register_func != NULL)
  mod->nm_context_register_func(exports, module, env->context(), mod->nm_priv);
else if (mod->nm_register_func != NULL)
  mod->nm_register_func(exports, module, mod->nm_priv);
else
  return env->ThrowError("Linked module has no declared entry point.");

cache->Set(module, exports);
```