streams2 and explicit encodings

This patch uses streams2 and makes the encodings explicit instead of implicit like before. You can now use the following encodings (with room for more):
* buffer (the default)
* array
* string
* uint8array

All of these encodings should work in all browsers, even if they don't have support for typed arrays natively since this patch uses the [typedarray](http://npmjs.org/package/typedarray) module for `Uint8Array` polyfill. browserify's Buffer module natively already uses the same version, so this module will be duped in the file size output so there isn't any extra file size overhead.

``` js
var concat = require('concat-stream')
process.stdin
  .pipe(concat({ encoding: 'uint8array' }, function (body) {
    console.log(body instanceof Uint8Array)
    console.log([].slice.call(body))
  }))
```

```
$ echo abc | node x.js 
true
[ 97, 98, 99, 10 ]
```