child: Reducing complexity in child_process

**This will properly result in some discussion, please do not make it a vote war!**

The complexity of the `child_process` module has increased a lot lately, especially since `thread` (internally called `isolate`) support. In `node 0.7` we currently have between 8 and 6 ways of spawning a child. And there is no significant difference between them.

| **Method** | **Process** | **Thread** |
|:-----------|:------------|:-----------|
| spawn      | yep         | yep        |
| execFile   | yep         | properly   |
| exec       | yep         | properly   |
| fork       | yep         | yep        |

This patch is an almost complete rewrite of the existing `child_process` module, but it do not aim to add or change any API since `node 0.6`. The complexity is reduced by grouping the different methods the following way:

```
                 Child
             +-----|------------+
          Process             Thread
             |                  |
  +----------+--------+     ----+----
  |          |        |         |
spawn -> execFile -> exec      fork       
```

By thinking this way it makes the purpose of the different methods more logical, not only to us in the coreland but also the userland.

For instance there has previously been an discussion about having `stdout` and `stderr` in `.fork` however this would be really difficult since `threads` do not support so. But by adding a `silent` option to `.fork` this streams would exist anyway. The complexity here is that the `stdout` and `stderr` streams depend on both the `silent` and `thread` option. _Please note that the `silent` option is a part of `node 0.7`._

**Compatibility:**

The compatibility is intended to be total backward compatible. The only exceptions seams to be:

* **customFds:** this could be added to `Process` function but since this was marked as deprecated it was not added. We could eventually add a `share` option there would share the file descriptors with the parent, the option would then default to `[false, false, false]`.

* **pid:** When using fork there is no `pid` since this is no longer a process. This should not be a big deal since userland would kill the process with `fork().kill()` and do not have any other usage for this.

It should be noted that to secure some fallback in backward compatible a `channel` option is added to `.spawn`. This is a two way `buffer channel` there use the `stdin`, like the `JSON-IPC` there exist in `.fork`. But is much more low-level encourage userland to use `.fork` when they only need a node worker. _To make this more clear please consider to alias `.fork` to `.worker`._

Also `stdinStream`, `stdoutStream` and `stderrStream` will no longer be added to the userland `options` argument. _This properties was internal API only._

**Why a rewrite:**

A rewrite seamed necessary since there was a lot of edge case preventing code there no longer was required because of the simplification of the object inherits flow. Most significant was that the `stdinStream` no longer needed to be a part of the `options` since this only needed to be handed in the c++ land.

Please also note that `stdout` and `stderr` close detection is now done when `_internal.onexit` is executed, this way we do not pollute userland with `_closesNeeded` and `_closesGot`.

**Documentation:**
The documentation has also been rewrite to reflect the changes, it can be read [here](https://github.com/AndreasMadsen/node-1/blob/child2/doc/api/child_processes.markdown).

**Remaining:**

* The missing `.kill` support has been added to in this patch. However the support is not perfect since `.signalCode` and `.exitCode` is not set. And because of #2665.

* `.disconnect()` is also missing, this will be added when supported in c++ land. #2663