Support older node versions via `readable-stream`/`es6-promise`.

Since we make use of the `cork` functionality in `streams3` and `Promise` in node 0.11 both need to be polyfilled for older versions of node. The two new libraries address both issues.

The oldest version of node, 0.8, includes an old verison of npm which cannot handle the "^" symbol in package.json dependencies; include workaround information for this scenario (upgrade to at least 1.4.6).

Updated CI to include the new node versions for testing and updated the documentation to reflect the new changes.

In tests, ensure the error event gets watched for before any writes occur (older versions of node emit `error` on the same tick).

Now included is a more sane way for handling a pseudo `_flush` handler. It turns out that if you use `expect` in an event from an event emitter, any exception you throw will be transparently captured and re-emitted as an error event; not necessarily what you want. try-catch blocks have been added for those cases to forward the error to the real handler.